tkinterで、スタートボタンとストップボタンを生成し、スタートボタンが押されれば数字をカウントし始め、ストップボタンが押されればカウントをストップ といったプログラムを作ろうと思っています。
ースタートボタンを押したらスタートメソッドを呼び出してメソッド内のwhile文でカウントが始まり、ストップフラグが立っていないかif文で確認し、フラグが立っていればwhile文をbreakで抜ける。
ーストップボタンを押したらストップフラグが立つ。
というように作ろうとしたのですが、while文が一度反応すればwhile文による無限ループから離脱できなくなり、ボタンも固まりプログラムがフリーズしてしまいます。
発生している問題・エラーメッセージ
・無限ループから抜け出せずプログラムがフリーズする
該当のソースコード
python3
import tkinter as tk import threading def start(): global frame global stop while True: if stop==False: break else: print(frame) frame=frame+1 def stop(): global stop stop=False ######ここからはメソッド外 frame=1 stop=True root=tk.Tk() Button001=tk.Button(root,text="Start",command=start) Button001.pack() Button002=tk.Button(root,text="End",command=stop) Button002.pack() root.mainloop()
試したこと
ネットで調べたら、threadingを使えば並行処理ができると聞いたので、試した結果プログラムはフリーズしなくなり、ボタンも押せるようになったのですがどういったわけかストップボタンを押してストップフラグを立たせてもループが止まりません・・・
threadingを使った場合のコード(『ここからはメソッド外』以降から
frame=1 stop=True thread_1 = threading.Thread(target=start) thread_2 = threading.Thread(target=stop) root=tk.Tk() Button001=tk.Button(root,text="Start",command=thread_1.start()) Button001.pack() Button002=tk.Button(root,text="End",command=thread_2.start()) Button002.pack() root.mainloop()
もしかしたら簡単すぎるミスがどこかにあるかもしれないのですが、自分でいろいろ試してもわかりませんでした・・・
どなたかご回答お願いします。m(_ _)m
あとわかりにくかったらすいません

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/19 14:41
2018/09/19 23:47