teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2019/04/30 22:17

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -47,4 +47,35 @@
47
47
  event = threading.Event()
48
48
  root.mainloop()
49
49
 
50
+ ```
51
+
52
+ ---
53
+
54
+ 単一のスレッドで回し続けると、カウンタ変数を書き換えるだけで簡単に実現できます。
55
+
56
+ ```python
57
+ import time
58
+ import threading
59
+ import tkinter as tk
60
+
61
+ def count():
62
+ global i
63
+ i = 0
64
+ while True:
65
+ print(i % 3 + 1)
66
+ i += 1
67
+ time.sleep(1)
68
+
69
+ def call_count():
70
+ global i
71
+ i = 0
72
+ if not th.isAlive():
73
+ th.start()
74
+
75
+ root=tk.Tk()
76
+ button=tk.Button(root,text="Count",command=call_count)
77
+ button.pack()
78
+
79
+ th = threading.Thread(target=count, daemon=True)
80
+ root.mainloop()
50
81
  ```

1

追記

2019/04/30 22:17

投稿

hayataka2049
hayataka2049

スコア30939

answer CHANGED
@@ -17,6 +17,8 @@
17
17
 
18
18
  これはほぼ期待通り動きます。とはいえ、余計に待たされてダサいですね。
19
19
 
20
+ **追記:can110さんのjoinする方法もシンプルで良いと思います。以下の方法とは若干動作が異なります(1秒を待ってから次のスレッドが起動するか、待たないでそのまま切り替わるか)。**
21
+
20
22
  押した瞬間に切り替わるようにしたければ、イベントを使うと良いでしょう。ちなみに`time.sleep`している間は何もできませんが、`Event.wait`であればタイムアウト時間を設定して待たせることも可能です。
21
23
 
22
24
  全体的に書き換えたコード。命名規則はPEP8に合わせています。