回答編集履歴

2

誤字訂正

2020/07/12 01:12

投稿

teamikl
teamikl

スコア8664

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

編集中に誤って送信してしまったので修正

2020/07/12 01:12

投稿

teamikl
teamikl

スコア8664

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 を使えます。