回答編集履歴
5
方法1について説明補足。非同期型への言及
test
CHANGED
@@ -14,9 +14,7 @@
|
|
14
14
|
|
15
15
|
各種イベントで呼ばれるコールバックは別スレッドで実行されてるわけではなく、
|
16
16
|
|
17
|
-
イベント処理のループ → 自分で定義したイベント → イベント処理のループ という流れ
|
17
|
+
イベント処理のループ → 自分で定義したイベント → イベント処理のループ という流れです。
|
18
|
-
|
19
|
-
|
20
18
|
|
21
19
|
|
22
20
|
|
@@ -32,6 +30,14 @@
|
|
32
30
|
|
33
31
|
|
34
32
|
|
33
|
+
この方法(メインスレッドでループを実行したい)を取りたい場合は、MainLoop()を使わずに、
|
34
|
+
|
35
|
+
「非同期プログラミング」という手法を取ります。wxではあまり事例がない上に、
|
36
|
+
|
37
|
+
コードも設計から大幅な変更を要求される為、詳細な説明は見送ります。
|
38
|
+
|
39
|
+
|
40
|
+
|
35
41
|
----
|
36
42
|
|
37
43
|
## <方法2>
|
4
説明追記
test
CHANGED
@@ -437,3 +437,11 @@
|
|
437
437
|
- MyClass.add はクラスMyClass に置かれた通常の関数です
|
438
438
|
|
439
439
|
通常の関数と同じように呼び出せますが、第一引数の self を明示的に要求します。
|
440
|
+
|
441
|
+
|
442
|
+
|
443
|
+
インスタンスを要求されますが、
|
444
|
+
|
445
|
+
インスタンスがあれば、そもそも通常インスタンスメソッドの呼び出しで良いので、
|
446
|
+
|
447
|
+
スコープ問題の解消として、この解決策は適してません。
|
3
インスタンスメソッドについて説明
test
CHANGED
@@ -422,4 +422,18 @@
|
|
422
422
|
|
423
423
|
print(MyClass.add(obj, 20)) # => 30
|
424
424
|
|
425
|
-
```
|
425
|
+
```
|
426
|
+
|
427
|
+
|
428
|
+
|
429
|
+
- obj.add はインスタンス経由での呼び出し、インスタンスメソッドといって
|
430
|
+
|
431
|
+
第一引数のself が自動的に自分自身が束縛されているので、呼び出すときの引数に省略できます。
|
432
|
+
|
433
|
+
obj.add(obj, 10) とは書きません。
|
434
|
+
|
435
|
+
|
436
|
+
|
437
|
+
- MyClass.add はクラスMyClass に置かれた通常の関数です
|
438
|
+
|
439
|
+
通常の関数と同じように呼び出せますが、第一引数の self を明示的に要求します。
|
2
説明追記&以前の説明の訂正
test
CHANGED
@@ -342,6 +342,28 @@
|
|
342
342
|
|
343
343
|
|
344
344
|
|
345
|
+
※ この例では、Play() のみを CallAfter で呼び出すようにしました。
|
346
|
+
|
347
|
+
Set 系のメソッドは直接描画に関与せず、
|
348
|
+
|
349
|
+
外部スレッド側でデータ更新 ⇒ メインスレッドで描画という流れになります。
|
350
|
+
|
351
|
+
ただし、ロックはしてないので別スレッドから上書きされる可能性はあります。
|
352
|
+
|
353
|
+
|
354
|
+
|
355
|
+
ここで一点訂正なのですが、以前、スレッドからCallLaterを使いと言ってた部分、
|
356
|
+
|
357
|
+
wxではスレッドからはタイマーを作成できませんでした。(他のGUIライブラリと混同していた)
|
358
|
+
|
359
|
+
|
360
|
+
|
361
|
+
可能ならCallLater,CallAfter等のタイマーではなく、
|
362
|
+
|
363
|
+
以前のコードで使われていた PostEvent を使い通知する方がより安全です。
|
364
|
+
|
365
|
+
|
366
|
+
|
345
367
|
----
|
346
368
|
|
347
369
|
## <方法4>
|
1
説明補足
test
CHANGED
@@ -356,6 +356,8 @@
|
|
356
356
|
|
357
357
|
これは簡単な例を使って説明します。
|
358
358
|
|
359
|
+
(他にも方法2, 3と同様の問題も有りますが、上で説明した通りです)
|
360
|
+
|
359
361
|
|
360
362
|
|
361
363
|
Python のクラスメソッドとインスタンスメソッドとの違いの為、
|