回答編集履歴
3
現状のコードの問題点について追記
test
CHANGED
@@ -50,6 +50,8 @@
|
|
50
50
|
|
51
51
|
|
52
52
|
|
53
|
+
|
54
|
+
|
53
55
|
----
|
54
56
|
|
55
57
|
> 当初、play_animeメソッド内で windowのupdateをいくらしても、windowsが更新されないのであれば、意味がないのだと思い、この更新メソッドを一番下に記載しました。
|
@@ -65,3 +67,31 @@
|
|
65
67
|
|
66
68
|
|
67
69
|
※ 厳密には、GUIのイベントループを動かしてるスレッドで。大抵の場合は、メインスレッド。
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
----
|
76
|
+
|
77
|
+
追記: 他の問題点
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
- `def play_anim(self):` ... この関数はトップレベルで宣言されてます、
|
82
|
+
|
83
|
+
クラス内ではないのでメソッドを想定した使いかたは出来ません。
|
84
|
+
|
85
|
+
- args=[DATA] ... 呼び出される側の関数で想定されてる値と異なります。
|
86
|
+
|
87
|
+
- thread.join ... join はスレッドの終了を待ちます。
|
88
|
+
|
89
|
+
イベントループ内で使うと、イベントループは停止しスレッド側に処理が移るので、
|
90
|
+
|
91
|
+
GUIイベントが処理されない → ウィンドウが応答なしの原因になります。
|
92
|
+
|
93
|
+
|
94
|
+
|
95
|
+
現状のコードの問題点ですが、スレッドの利用方法から見直す必要があるので、
|
96
|
+
|
97
|
+
エラーを修正して期待通りに動くとはいきません。
|
2
説明補足
test
CHANGED
@@ -34,11 +34,15 @@
|
|
34
34
|
|
35
35
|
|
36
36
|
|
37
|
-
解消法としては、上記のサンプルの様に
|
37
|
+
解消法としては、(追記・補足: スレッドを使う場合は) 上記のサンプルの様に
|
38
38
|
|
39
39
|
サブスレッドからは通知のみを行い、メインスレッド側でGUI関連の処理が行われるような構成にして下さい。
|
40
40
|
|
41
|
+
|
42
|
+
|
41
|
-
サブスレッド側で行う処理が
|
43
|
+
他の案で、サブスレッド側で行う処理が時間の掛かる処理でない場合は、タイマーイベントを使う方法もあります。
|
44
|
+
|
45
|
+
処理内容次第ですが、用途がアニメーションのみであれば、タイマーの方が適切な場合もあり。
|
42
46
|
|
43
47
|
|
44
48
|
|
1
説明補足
test
CHANGED
@@ -57,3 +57,7 @@
|
|
57
57
|
明示的に更新する方法もありますが、サブスレッドからのGUIの直接操作自体を回避した方が良いです。
|
58
58
|
|
59
59
|
上述した方法で、「GUIの操作はメインスレッドからのみ」とすると、必然的に解消されるはずです。
|
60
|
+
|
61
|
+
|
62
|
+
|
63
|
+
※ 厳密には、GUIのイベントループを動かしてるスレッドで。大抵の場合は、メインスレッド。
|