回答編集履歴

4

文章加筆

2022/10/28 04:15

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -1,3 +1,6 @@
1
+ 更新されるタイミングに関しては、window.read 内であっていますが、
2
+ このコードでは time.sleep 自体が問題箇所です。
3
+
1
4
  「イベント駆動型」のプログラムでは
2
5
  イベントループの処理を阻害するような操作を行ってはいけません。
3
6
 
@@ -33,6 +36,7 @@
33
36
  window.read() のタイミングで描画が更新されるのはそのとおりですが、
34
37
  他にも多くの役割を担っていて、
35
38
  window.read() ではイベントが発生するまで待機しています。
39
+
36
40
  下のコードは、イベントを読み飛ばしているので
37
41
  プログラムが大規模になってくると、面倒な不具合の原因に成ります。
38
42
  window.read() はループ内で一箇所にしましょう。

3

文章修正、コードは3秒ではなかった

2022/10/28 04:00

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -18,7 +18,7 @@
18
18
  window.read がsleepの間呼ばれない⇛表示が更新されない
19
19
  となってます。コードの動作としては正しい挙動で、
20
20
 
21
- 3秒後に何かを行いたい場合は、
21
+ 一定時間後に何かを行いたい場合は、
22
22
  こういったイベント駆動型のプログラムでは、スレッドや
23
23
  イベントループが提供するタイマー機能を利用します。
24
24
 

2

文章修正

2022/10/28 03:59

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -34,5 +34,5 @@
34
34
  他にも多くの役割を担っていて、
35
35
  window.read() ではイベントが発生するまで待機しています。
36
36
  下のコードは、イベントを読み飛ばしているので
37
- プログラムが大規模になってくると、面倒な不具合の原因にかえんせん
37
+ プログラムが大規模になってくると、面倒な不具合の原因にりま
38
38
  window.read() はループ内で一箇所にしましょう。

1

注意点を追記

2022/10/28 03:45

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -26,8 +26,9 @@
26
26
  スレッドを用いたデモがあります。
27
27
  https://github.com/PySimpleGUI/PySimpleGUI/blob/master/DemoPrograms/Demo_Multithreaded_Long_Tasks.py
28
28
  - time.sleep を使っていますが、別スレッドでの実行なので window.read() を阻害しません
29
- - 別スレッドからGUIスレッド更新のためにwrite_event_valueを使います
29
+ - 別スレッドからGUIスレッド更新通知のためにwrite_event_valueを使います
30
30
   別スレッド内で直接 GUI操作はしてはいけません(マルチスレッドなので安全でない操作)
31
+  GUIの表示更新は必ずイベントループ側で行います。
31
32
 
32
33
  window.read() のタイミングで描画が更新されるのはそのとおりですが、
33
34
  他にも多くの役割を担っていて、