参考にした質問と回答:Python3のtkinterで並行処理?を行いたい
参考にしたサイト:簡易ストップウォッチを作ってみた @Python3
似たような質問で恐縮です。
上記を参考に見よう見真似で簡易ストップウォッチを作ったのですがスタートした後に他ボタンを押すと
反応が無く強制終了するしかない状態です。
他のボタンを押さなければ1秒毎に標準出力で秒数のカウントは出来ています。
スレッド化無しで動くならスレッド化は無くてもよいのですがwhileループ中にボタンを反応させるにはどこが間違っているのでしょうか?
ヒントだけでもご教示いただけると助かります。
###実現したいこと
スタート,ストップ,終了ボタン制御
ループを使ったラベルの常時更新
###試したこと
Python3のtkinterで並行処理?を行いたいの@KSwordOfHasteさんの回答コードで動作確認済み。
クラス化したこと以外は同じような処理にしたつもりなのですがうまく動きません。
フラグをself.インスタンス変数にしてみたりフラグ変数の配置場所を変えてみましたが結果は変わりませんでした。
ループ無しでの動作は一通り問題無く動いています。
Python3.7.0
Python3
1# coding=UTF-8 2import sys 3import time 4import tkinter as tk 5import threading as th 6 7 8class SSW(tk.Frame): 9 10 11 def __init__(self, master = None): 12 13 tk.Frame.__init__(self, master) 14 self.master.title("Sample Stop Watch") 15 self.master.bind("<Control-q>", self.quit) 16 self.master.geometry("280x160") 17 18 self.lbl_msg = tk.Label(master, text = "<quit:Control-q>") 19 self.lbl_msg.pack(side = "top") 20 self.lbl_lap = tk.Label(master, text = "0.00") 21 self.lbl_lap.pack(side = "top") 22 23 self.btn_run = tk.Button(master, text = "run", command = self.run) 24 self.btn_run.pack() 25 self.btn_end = tk.Button(master, text = "end", command = self.end) 26 self.btn_end.pack() 27 self.btn_quit = tk.Button(master, text = "quit", command = self.quit) 28 self.btn_quit.pack() 29 30 def loop(self): 31 32 global timer_start 33 timer_start = time.time() 34 35 global stop_flg 36 stop_flg = False 37 38 while not stop_flg: 39 time.sleep(1) 40 timer_lap = time.time() - timer_start 41 out_lap = round(timer_lap, 2) 42 self.lbl_lap.configure(text = out_lap) 43 print(out_lap) 44 45 def run(self): 46 print('Start!') 47 # スレッド開始 48 th.Thread(target = self.loop()).start() 49 50 def end(self): 51 print('Stop!') 52 global stop_flg 53 stop_flg = True 54 55 def quit(self): 56 sys.exit() 57 58 59# main 60if __name__ == '__main__': 61 ss = SSW() 62 ss.pack() 63 ss.mainloop()

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/19 05:36
2018/09/19 06:26
2018/09/19 06:29
2018/09/19 06:31
2018/09/19 07:02
2018/09/19 07:09 編集
2018/09/19 07:44