回答編集履歴
5
他の解決策について追記
test
CHANGED
@@ -15,6 +15,9 @@
|
|
15
15
|
解決策
|
16
16
|
GUI操作でバックグラウンドで処理を行いたい場合は
|
17
17
|
GUIライブラリの提供するタイマー機能(tkinter では afterメソッド)を使いましょう。
|
18
|
+
|
19
|
+
追記
|
20
|
+
他の解決策で、今回の用途であれば、`<Motion>`イベントも使えます。
|
18
21
|
|
19
22
|
----
|
20
23
|
他、GUI等のイベント駆動型プログラムでの禁止項目
|
4
間違いではないので、取り消し線を解除
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
GUIへのアクセスは、基本、メインスレッド側でしか行ってはいけません。
|
3
3
|
複数スレッドからの同時アクセスにより、意図しない挙動になることがあります。
|
4
4
|
|
5
|
-
|
5
|
+
毎回止まっているところは、time.sleep です。
|
6
6
|
sleepによりスレッドの切り替えが発生する為。
|
7
7
|
他は数ms しか掛からない処理で、 200ms をsleepで待機しているので
|
8
8
|
止まりやすい位置ではあります。ただし保証された挙動ではありません。
|
3
エラー内容に関して説明補足
test
CHANGED
@@ -2,10 +2,15 @@
|
|
2
2
|
GUIへのアクセスは、基本、メインスレッド側でしか行ってはいけません。
|
3
3
|
複数スレッドからの同時アクセスにより、意図しない挙動になることがあります。
|
4
4
|
|
5
|
-
毎回止まっているところは、time.sleep です。
|
5
|
+
~~毎回止まっているところは、time.sleep です。~~
|
6
6
|
sleepによりスレッドの切り替えが発生する為。
|
7
7
|
他は数ms しか掛からない処理で、 200ms をsleepで待機しているので
|
8
8
|
止まりやすい位置ではあります。ただし保証された挙動ではありません。
|
9
|
+
|
10
|
+
追記: 質問の意図が、エラーで止まってる方だとすれば、説明補足で
|
11
|
+
self.posy1 は、メインスレッド側で thread.join() 後に None になるため。
|
12
|
+
毎回そこのエラーが発生する理由は上述の通りです。
|
13
|
+
|
9
14
|
|
10
15
|
解決策
|
11
16
|
GUI操作でバックグラウンドで処理を行いたい場合は
|
2
タイマー内でのループについて補足
test
CHANGED
@@ -26,6 +26,11 @@
|
|
26
26
|
今回のコードでは、thead.join() スレッドの終了を待ちますが
|
27
27
|
別スレッド側では time.sleep しているので最長 200 + α ms の間イベントループが止まります。
|
28
28
|
|
29
|
+
GUIライブラリの提供するタイマー機能を使えば、
|
30
|
+
イベントループ内でタイマー・イベントとして割り込むことができるので、
|
31
|
+
イベントループを止めることなく、バックグラウンドで処理ということができます。
|
32
|
+
ただし、タイマー内でループ処理を行いたい場合などは少し工夫が必要です。
|
33
|
+
|
29
34
|
無理やりマルチスレッドで動かすなら
|
30
35
|
(おすすめはしませんが、問題点の把握と症状が解消することの確認の為)
|
31
36
|
- スレッドを daemonスレッドにする → 終了時に確実に破棄する為
|
1
文章校正
test
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
他は数ms しか掛からない処理で、 200ms をsleepで待機しているので
|
8
8
|
止まりやすい位置ではあります。ただし保証された挙動ではありません。
|
9
9
|
|
10
|
+
解決策
|
10
11
|
GUI操作でバックグラウンドで処理を行いたい場合は
|
11
12
|
GUIライブラリの提供するタイマー機能(tkinter では afterメソッド)を使いましょう。
|
12
13
|
|