回答編集履歴
2
指摘事項修整
answer
CHANGED
@@ -1,15 +1,21 @@
|
|
1
|
+
#### 7/18指摘箇所修整
|
2
|
+
|
1
3
|
私は趣味でtkinterを弄っている程度ですが、
|
2
4
|
参考になればと回答させていただきます。
|
3
5
|
|
4
|
-
root.after の待機中はroot.mainloop()も停止し、描画は更新されません。
|
6
|
+
~~root.after の待機中はroot.mainloop()も停止し、描画は更新されません。
|
5
7
|
そのため、質問者様のプログラムのままですと
|
6
8
|
StringVarを変更してもroot.afterで処理が一旦停止してしまいます。
|
7
9
|
結果、そのまま3000ms後にLabelが更新されるまでもなくroot.quit()が開始されるので、
|
8
|
-
ウィンドウが閉じてしまう、といった形になっています。
|
10
|
+
ウィンドウが閉じてしまう、といった形になっています。~~
|
11
|
+
**コメントにてteamikiさんからご指摘があり、ここは間違いでした。**
|
12
|
+
**root.after待機中でもmainloopは実行されるとのことです。**
|
9
13
|
|
10
14
|
mainloopとは別に連続更新が必要な際は、
|
11
15
|
threadingを使用して**tkでない方**の処理を別スレッドに渡してしまうのがよいかと思います。
|
12
16
|
※root.mainloop()はthreadingで別スレッドに渡すとうまく動作しないのでその点は留意しておいてください
|
17
|
+
**こちらも別スレッドからのGUI操作に関しては問題があるとの指摘を受けました。**
|
18
|
+
**詳細はコメントをご確認ください。**
|
13
19
|
|
14
20
|
また、今回tkウィンドウを閉じるということでしたので
|
15
21
|
root.quit()ではなくroot.destroy()に変更しています。
|
@@ -22,22 +28,11 @@
|
|
22
28
|
```python
|
23
29
|
from tkinter import *
|
24
30
|
from tkinter import ttk
|
25
|
-
import threading
|
26
|
-
import time
|
27
|
-
import tkinter
|
28
31
|
|
29
|
-
#スレッド用
|
30
|
-
def sleep_and_close():
|
31
|
-
time.sleep(3) #3秒待機
|
32
|
-
root.destroy() #tkウィンドウを閉じる
|
33
|
-
|
34
|
-
|
35
32
|
#クリック動作(ボタンを押したらラベルを「clicked」に更新して、3秒後にウィンドウを閉じる
|
36
33
|
def clicked():
|
37
34
|
s.set("clicked")
|
38
|
-
#押されてから待機~更新の処理を別スレッドで行う。
|
39
|
-
subthread = threading.Thread(target=sleep_and_close)
|
40
|
-
|
35
|
+
root.after(3000, root.destroy)
|
41
36
|
|
42
37
|
~~~以下、同様~~~
|
43
38
|
```
|
1
「渡す」の文言が抜けていた
answer
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
mainloopとは別に連続更新が必要な際は、
|
11
11
|
threadingを使用して**tkでない方**の処理を別スレッドに渡してしまうのがよいかと思います。
|
12
|
-
※root.mainloop()はthreadingで別スレッドにすとうまく動作しないのでその点は留意しておいてください
|
12
|
+
※root.mainloop()はthreadingで別スレッドに渡すとうまく動作しないのでその点は留意しておいてください
|
13
13
|
|
14
14
|
また、今回tkウィンドウを閉じるということでしたので
|
15
15
|
root.quit()ではなくroot.destroy()に変更しています。
|