別ファイルのGUIアプリをimportして実行するとラベルが表示されなくなる
解決したいこと
tkinterで作成しているmainプログラムのボタンを押すと、別ファイルのタイマープログラムを呼び出すプログラムを作っています。
mainプログラムからタイマーのプログラムを呼び出したいが、タイマーのラベルが表示されなくなります。
タイマーのラベルを表示できるようにしたいです。わかる方がいましたらご教授お願いします。
発生している問題・エラー
エラーメッセージは出ていません。
該当するソースコード
python main.py
import tkinter as tk
class main:
def __init__(self) -> None:
win = tk.Tk()
win.title("main")
win.geometry('510x170')
Button1= tk.Button(win, text="カウントダウンタイマー",bg="lightgreen",command= self.ctdown).grid()
win.mainloop()
self.ctdown()
def ctdown(self):
import countdown
app = main()
python countdown.py
import tkinter as tk
from tkinter import font
from tkinter import messagebox
class App:
def __init__(self, win):
self.win = win
self.win.title('Timer')
self.win.geometry('510x170')
self.count = None
self.create_widgets()
self.create_widgets = None
def create_widgets(self):
self.win.rowconfigure(0, weight=1)
self.win.columnconfigure(0, weight=1)
self.frame111 = tk.Frame(self.win, width=510,height=170)
self.frame111.grid(row=0, column=0, sticky="nsew")
tk.Label(self.frame111, text="カウントダウンタイマー",bg="lightgreen").pack(fill=tk.X)
tk.Label(self.frame111,text="時間(秒)").pack()
self.entry = tk.Entry(self.frame111)
self.entry.insert(tk.END,"4")#標準時間
self.entry.pack()
self.time = tk.StringVar()
self.time_init()
self.label = tk.Label(self.frame111, textvariable=self.time, relief=tk.SUNKEN,
font=("",20),bg='white')
self.label.pack(fill=tk.X,pady=10)
self.bt000 = tk.Frame(self.frame111)
self.bt000.pack()
self.font1 = font.Font(family='Helvetica', size=15, weight='bold')
self.b_start = tk.Button(self.bt000, text='Start', font=self.font1, command=self.start)
self.b_stop = tk.Button(self.bt000, text='Stop', font=self.font1, command=self.stop, state=tk.DISABLED)
self.b_reset = tk.Button(self.bt000, text='Reset', font=self.font1, command=self.reset, state=tk.DISABLED)
self.b_start.pack(side=tk.LEFT,ipadx=30, padx=10)
self.b_stop.pack(side=tk.LEFT,ipadx=30, padx=10)
self.b_reset.pack(side=tk.LEFT,ipadx=30, padx=10)
def time_init(self):
self.time.set("セットする時間を秒単位で入力してください。")
def time_err(self):
self.time.set("不正な入力値です。")
def time_set(self):
self.h = self.count // 3600
self.m = (self.count % 3600) // 60
self.s = (self.count % 3600) % 60
self.time.set("のこり %02d時間 %02d分 %02d秒" % (self.h,self.m,self.s))
def start(self):
try:
if not self.count:
self.count = int(self.entry.get())
except:
self.time_err()
return
self.started = True
self.time_set()
if(0 < self.count <= 10):
self.label.config(bg="red")
self.win.after(1000, self.counting)
self.entry.config(state=tk.DISABLED)
self.b_start.config(state=tk.DISABLED)
self.b_stop.config(state=tk.NORMAL)
self.b_reset.config(state=tk.DISABLED)
def stop(self):
self.started = False
self.b_start.config(state=tk.NORMAL)
self.b_stop.config(state=tk.DISABLED)
self.b_reset.config(state=tk.NORMAL)
def reset(self):
self.count = None
self.time_init()
self.label.config(bg="white")
self.b_reset.config(state=tk.DISABLED)
self.entry.configure(state=tk.NORMAL)
def counting(self):
if self.started:
self.count -=1
self.time_set()
if (0 < self.count <= 10):
self.label.config(bg="red")
if self.count <= 0:
self.stop()
self.reset()
ret = messagebox.askokcancel("完了","タイムアップです" )
if ret == True:
self.win.destroy()
self.win.after(1000, self.counting)
def main():
win = tk.Tk()
App(win)
win.mainloop()
app = main()
0