回答編集履歴

2

指摘事項修整

2021/07/18 05:57

投稿

Mikyrri
Mikyrri

スコア15

test CHANGED
@@ -1,10 +1,14 @@
1
+ #### 7/18指摘箇所修整
2
+
3
+
4
+
1
5
  私は趣味でtkinterを弄っている程度ですが、
2
6
 
3
7
  参考になればと回答させていただきます。
4
8
 
5
9
 
6
10
 
7
- root.after の待機中はroot.mainloop()も停止し、描画は更新されません。
11
+ ~~root.after の待機中はroot.mainloop()も停止し、描画は更新されません。
8
12
 
9
13
  そのため、質問者様のプログラムのままですと
10
14
 
@@ -12,7 +16,11 @@
12
16
 
13
17
  結果、そのまま3000ms後にLabelが更新されるまでもなくroot.quit()が開始されるので、
14
18
 
15
- ウィンドウが閉じてしまう、といった形になっています。
19
+ ウィンドウが閉じてしまう、といった形になっています。~~
20
+
21
+ **コメントにてteamikiさんからご指摘があり、ここは間違いでした。**
22
+
23
+ **root.after待機中でもmainloopは実行されるとのことです。**
16
24
 
17
25
 
18
26
 
@@ -21,6 +29,10 @@
21
29
  threadingを使用して**tkでない方**の処理を別スレッドに渡してしまうのがよいかと思います。
22
30
 
23
31
  ※root.mainloop()はthreadingで別スレッドに渡すとうまく動作しないのでその点は留意しておいてください
32
+
33
+ **こちらも別スレッドからのGUI操作に関しては問題があるとの指摘を受けました。**
34
+
35
+ **詳細はコメントをご確認ください。**
24
36
 
25
37
 
26
38
 
@@ -46,24 +58,6 @@
46
58
 
47
59
  from tkinter import ttk
48
60
 
49
- import threading
50
-
51
- import time
52
-
53
- import tkinter
54
-
55
-
56
-
57
- #スレッド用
58
-
59
- def sleep_and_close():
60
-
61
- time.sleep(3) #3秒待機
62
-
63
- root.destroy() #tkウィンドウを閉じる
64
-
65
-
66
-
67
61
 
68
62
 
69
63
  #クリック動作(ボタンを押したらラベルを「clicked」に更新して、3秒後にウィンドウを閉じる
@@ -72,11 +66,7 @@
72
66
 
73
67
  s.set("clicked")
74
68
 
75
- #押されてから待機~更新の処理を別スレッドで行う。
76
-
77
- subthread = threading.Thread(target=sleep_and_close)
78
-
79
- subthread.start()
69
+ root.after(3000, root.destroy)
80
70
 
81
71
 
82
72
 

1

「渡す」の文言が抜けていた

2021/07/18 05:57

投稿

Mikyrri
Mikyrri

スコア15

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  threadingを使用して**tkでない方**の処理を別スレッドに渡してしまうのがよいかと思います。
22
22
 
23
- ※root.mainloop()はthreadingで別スレッドにすとうまく動作しないのでその点は留意しておいてください
23
+ ※root.mainloop()はthreadingで別スレッドにすとうまく動作しないのでその点は留意しておいてください
24
24
 
25
25
 
26
26