実現したいこと
tkinterで作成しているmainプログラムのボタンを押すと、別ファイルのタイマープログラムを呼び出すプログラムを作成しています。
前提
タイマープログラム単体で実行すると思った通りのラベルを表示してくれますが、
mainプログラムからタイマーのプログラムを呼びだして実行すると、タイマーの
ラベルが表示されなくなります。
タイマーのラベルを表示できるようにしたいです。わかる方がいましたらご教授お願いします。
タイマープログラム単体で実行すると思った通りのラベルを表示してくれます
発生している問題・エラーメッセージ
mainプログラムからタイマープログラムを呼び出したときのGUI表示(問題点)↓
エラーは特に出ていません
該当のソースコード(mainプログラム)
python.main.py
1import tkinter as tk 2 3 4class main: 5 def __init__(self) -> None: 6 win = tk.Tk() 7 win.title("main") 8 win.geometry('510x170') 9 Button1= tk.Button(win, text="カウントダウンタイマー",bg="lightgreen",command= self.ctdown).grid() 10 win.mainloop() 11 self.ctdown() 12 13 14 15 def ctdown(self): 16 import countdown 17 18app = main() 19
該当のソースコード(countdownプログラム)
python.countdown.py
1import tkinter as tk 2from tkinter import font 3from tkinter import messagebox 4 5 6class App: 7 def __init__(self, win): 8 self.win = win 9 self.win.title('Timer') 10 self.win.geometry('510x170') 11 self.count = None 12 self.create_widgets() 13 self.create_widgets = None 14 15 16 17 18 19 20 def create_widgets(self): 21 self.win.rowconfigure(0, weight=1) 22 self.win.columnconfigure(0, weight=1) 23 24 self.frame111 = tk.Frame(self.win, width=510,height=170) 25 self.frame111.grid(row=0, column=0, sticky="nsew") 26 tk.Label(self.frame111, text="カウントダウンタイマー",bg="lightgreen").pack(fill=tk.X) 27 tk.Label(self.frame111,text="時間(秒)").pack() 28 self.entry = tk.Entry(self.frame111) 29 self.entry.insert(tk.END,"4")#標準時間 30 self.entry.pack() 31 self.time = tk.StringVar() 32 self.time_init() 33 self.label = tk.Label(self.frame111, textvariable=self.time, relief=tk.SUNKEN, 34 font=("",20),bg='white') 35 self.label.pack(fill=tk.X,pady=10) 36 self.bt000 = tk.Frame(self.frame111) 37 self.bt000.pack() 38 self.font1 = font.Font(family='Helvetica', size=15, weight='bold') 39 40 self.b_start = tk.Button(self.bt000, text='Start', font=self.font1, command=self.start) 41 self.b_stop = tk.Button(self.bt000, text='Stop', font=self.font1, command=self.stop, state=tk.DISABLED) 42 self.b_reset = tk.Button(self.bt000, text='Reset', font=self.font1, command=self.reset, state=tk.DISABLED) 43 44 self.b_start.pack(side=tk.LEFT,ipadx=30, padx=10) 45 self.b_stop.pack(side=tk.LEFT,ipadx=30, padx=10) 46 self.b_reset.pack(side=tk.LEFT,ipadx=30, padx=10) 47 48 def time_init(self): 49 self.time.set("セットする時間を秒単位で入力してください。") 50 51 def time_err(self): 52 self.time.set("不正な入力値です。") 53 54 def time_set(self): 55 self.h = self.count // 3600 56 self.m = (self.count % 3600) // 60 57 self.s = (self.count % 3600) % 60 58 self.time.set("のこり %02d時間 %02d分 %02d秒" % (self.h,self.m,self.s)) 59 60 def start(self): 61 try: 62 if not self.count: 63 self.count = int(self.entry.get()) 64 except: 65 self.time_err() 66 return 67 68 self.started = True 69 self.time_set() 70 if(0 < self.count <= 10): 71 self.label.config(bg="red") 72 self.win.after(1000, self.counting) 73 self.entry.config(state=tk.DISABLED) 74 self.b_start.config(state=tk.DISABLED) 75 self.b_stop.config(state=tk.NORMAL) 76 self.b_reset.config(state=tk.DISABLED) 77 78 def stop(self): 79 self.started = False 80 self.b_start.config(state=tk.NORMAL) 81 self.b_stop.config(state=tk.DISABLED) 82 self.b_reset.config(state=tk.NORMAL) 83 84 def reset(self): 85 self.count = None 86 self.time_init() 87 self.label.config(bg="white") 88 self.b_reset.config(state=tk.DISABLED) 89 self.entry.configure(state=tk.NORMAL) 90 91 def counting(self): 92 if self.started: 93 self.count -=1 94 self.time_set() 95 96 if (0 < self.count <= 10): 97 self.label.config(bg="red") 98 99 if self.count <= 0: 100 self.stop() 101 self.reset() 102 ret = messagebox.askokcancel("完了","タイムアップです" ) 103 if ret == True: 104 self.win.destroy() 105 106 107 self.win.after(1000, self.counting) 108 109 110def main(): 111 win = tk.Tk() 112 App(win) 113 win.mainloop() 114 115app = main() 116
試したこと
google検索
https://teratail.com/questions/318512
上記の記事が似ているような現象でしたので、真似をしてみましたが、私の知識不足で
応用ができませんでした。
補足情報(FW/ツールのバージョンなど)
開発環境はVScodeで作成しております。
この投稿はマルチポストをしております。推奨はされておりませんが
どうしても早く解決をしたいのと、なかなか回答が頂けない為、このような形を取らせていただいております。
マルチポストのURLは以下になります。ご了承お願いいたします。
https://qiita.com/mckie/questions/04ff47a72dc5b7af8804
回答2件
あなたの回答
tips
プレビュー