回答編集履歴
2
追記
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
追記
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に合わせています。
|