前提・実現したいこと
今作成しているプログラムでThreadが別のThreadを呼び出すコードを書いたのですがエラーが起こってしまいます。
該当のソースコード
分かりやすいようにちょっと簡単なプログラムを用意しました
以下のプログラムを実行すると画面が形成されて、そこに0,Start,Stopというボタンが表示されます。
Startというボタンを押したら数字がカウントされて0の部分が更新され、Stopを押すとカウントが止まります。
python
1import tkinter as tk 2import threading 3 4class App(object): 5 def __init__(self): 6 self.frame=1 7 self.stop_fg=False 8 9 self.gui() 10 11 def gui(self): 12 self.root=tk.Tk() 13 self.Label001=tk.Label(self.root,text="0") 14 self.Label001.pack() 15 Button001=tk.Button(self.root,text="Start",command=self.on_start) 16 Button001.pack() 17 Button002=tk.Button(self.root,text="Stop",command=self.on_stop) 18 Button002.pack() 19 self.root.mainloop() 20 21 def on_start(self): 22 threading.Thread(target=self.on_run).start() 23 24 def on_stop(self): 25 self.stop_fg=True 26 27 def on_run(self): 28 self.stop_fg=False 29 30 while self.stop_fg!=True: 31 #threading.Thread(target=self.count).start() 32 33 #上のコードを実行する場合、下の2つのコードをコメント化する必要があります 34 self.Label001["text"]=self.frame 35 self.frame=self.frame+1 36 37 def count(self): 38 self.Label001["text"]=self.frame 39 self.frame=self.frame+1 40 41app=App() 42
発生している問題・エラーメッセージ
カウントを担当している部分をthreadで処理させたいのですが、コメント化している文を実行させた場合、Startボタンを押すとプログラムがフリーズしてしまいます。
Thread内から他のThreadを呼び出しているのが原因なんでしょうが、なんとかしてエラーを回避することはできないでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/20 06:53
2018/12/20 07:19
2018/12/20 07:30
2018/12/20 07:39 編集