回答編集履歴
2
誤字訂正
test
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
-
mainloop と time.sleep 共に
|
41
|
+
mainloop と time.sleep 共に処理をブロックする関数なので、
|
42
42
|
|
43
43
|
実行が終わるまで次の行のコードは実行されません。実行が終わるのは
|
44
44
|
|
1
編集中に誤って送信してしまったので修正
test
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
回答は既にされているので、その解説を
|
2
|
+
|
3
|
+
|
4
|
+
|
5
|
+
----
|
6
|
+
|
1
7
|
> エラーは表示されませんが、赤い画面が表示されず、黒い画面が表示され終わります。
|
2
8
|
|
3
9
|
> time.sleep(3)は無視されたようです。
|
@@ -10,11 +16,15 @@
|
|
10
16
|
|
11
17
|
- time.sleep 3秒待つ
|
12
18
|
|
13
|
-
- mainloop 描画
|
19
|
+
- mainloop ここで描画
|
14
20
|
|
15
21
|
|
16
22
|
|
23
|
+
プログラムは指示されたとおりにコードを実行してますが、
|
24
|
+
|
25
|
+
ユーザが目にする事象としては、
|
26
|
+
|
17
|
-
|
27
|
+
「プログラムの起動に少し時間が掛かり、赤い四角が表示」となります。
|
18
28
|
|
19
29
|
|
20
30
|
|
@@ -28,16 +38,40 @@
|
|
28
38
|
|
29
39
|
|
30
40
|
|
31
|
-
|
32
|
-
|
33
41
|
mainloop と time.sleep 共に「ブロッキン」する関数なので、
|
34
42
|
|
35
|
-
実行が終わるまで次のコードは実行されません。
|
43
|
+
実行が終わるまで次の行のコードは実行されません。実行が終わるのは
|
36
44
|
|
37
45
|
time.sleepは指定秒数。mainloopが終了するのはウィンドウが閉じられた時です。
|
38
46
|
|
39
47
|
|
40
48
|
|
41
|
-
tkinter
|
49
|
+
GUIのプログラムでは、イベントループ内(tkinter では mainloop)で、
|
42
50
|
|
51
|
+
描画や、マウスなどのキー入力イベント、等がループ処理されてます。
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
その為、何か時間の掛かる処理を行うと、
|
56
|
+
|
57
|
+
GUIの処理を担当している関数が呼び出されなくなり、
|
58
|
+
|
59
|
+
結果、その間はウィンドウが更新されず操作を受け付けない状態となります。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
これはtkinter に限らず、「イベント駆動型プログラミング」全般に共通する、
|
64
|
+
|
43
|
-
大抵の GUI で同様の注意事項
|
65
|
+
大抵の GUI で同様の注意事項です。
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
- time.sleep -> タイマーを使う (tkinter では after())
|
70
|
+
|
71
|
+
- 時間の掛かるループ処理、ファイル/ネットワークIO等 -> スレッドを使う
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
注意点は、GUI のイベントループ mainloop() を阻害してはいけないという点なので、
|
76
|
+
|
77
|
+
別スレッドでは自由に time.sleep を使えます。
|