回答編集履歴

5

方法1について説明補足。非同期型への言及

2020/04/27 23:31

投稿

teamikl
teamikl

スコア8664

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

説明追記

2020/04/27 23:31

投稿

teamikl
teamikl

スコア8664

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

インスタンスメソッドについて説明

2020/04/27 21:56

投稿

teamikl
teamikl

スコア8664

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

説明追記&以前の説明の訂正

2020/04/27 21:47

投稿

teamikl
teamikl

スコア8664

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

説明補足

2020/04/27 21:42

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -356,6 +356,8 @@
356
356
 
357
357
  これは簡単な例を使って説明します。
358
358
 
359
+ (他にも方法2, 3と同様の問題も有りますが、上で説明した通りです)
360
+
359
361
 
360
362
 
361
363
  Python のクラスメソッドとインスタンスメソッドとの違いの為、