質問編集履歴

1 コメント文追加

tomo1998

tomo1998 score 34

2018/12/20 15:00  投稿

Threading実行中に他のThreadを呼び出すのは不可能?
### 前提・実現したいこと
今作成しているプログラムでThreadが別のThreadを呼び出すコードを書いたのですがエラーが起こってしまいます。
### 該当のソースコード
分かりやすいようにちょっと簡単なプログラムを用意しました
以下のプログラムを実行すると画面が形成されて、そこに0,Start,Stopというボタンが表示されます。
Startというボタンを押したら数字がカウントされて0の部分が更新され、Stopを押すとカウントが止まります。
```python
import tkinter as tk
import threading
class App(object):
   def __init__(self):
       self.frame=1
       self.stop_fg=False       
       
       self.gui()   
   def gui(self):
       self.root=tk.Tk()
       self.Label001=tk.Label(self.root,text="0")
       self.Label001.pack()
       Button001=tk.Button(self.root,text="Start",command=self.on_start)
       Button001.pack()
       Button002=tk.Button(self.root,text="Stop",command=self.on_stop)
       Button002.pack()
       self.root.mainloop()
   def on_start(self):
       threading.Thread(target=self.on_run).start()
   def on_stop(self):
       self.stop_fg=True
   def on_run(self):
       self.stop_fg=False
       while self.stop_fg!=True:
           #threading.Thread(target=self.count).start()
 
           #上のコードを実行する場合、下の2つのコードをコメント化する必要があります  
           self.Label001["text"]=self.frame
           self.frame=self.frame+1       
   def count(self):
       self.Label001["text"]=self.frame
       self.frame=self.frame+1
app=App()
```
### 発生している問題・エラーメッセージ
カウントを担当している部分をthreadで処理させたいのですが、コメント化している文を実行させた場合、Startボタンを押すとプログラムがフリーズしてしまいます。
Thread内から他のThreadを呼び出しているのが原因なんでしょうが、なんとかしてエラーを回避することはできないでしょうか?
  • Python 3.x

    15428 questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る