回答編集履歴

2

ループ中にイベントループを止めない方法を追記。repl.it にコードを追加

2020/06/05 13:41

投稿

teamikl
teamikl

スコア8742

test CHANGED
@@ -1,4 +1,22 @@
1
1
  タイマーの動作確認用コード
2
+
3
+
4
+
5
+ (ブラウザ上で実行して動作確認できます)
6
+
7
+ https://repl.it/@MiKLTea/QTimer-and-EventLoop-demo
8
+
9
+
10
+
11
+ 時間のかかる処理中にイベントループを動かす方法を追記。(コメント内)
12
+
13
+
14
+
15
+ 設計から手を入れられる段階では、この方法は避けた方が良いと思いますが、
16
+
17
+ イベントループが行うはずだった処理を自分で組んだループ内で定期的に呼び出す事で、
18
+
19
+ イベントループの停止を回避できます。→ processEvents
2
20
 
3
21
 
4
22
 
@@ -46,7 +64,19 @@
46
64
 
47
65
  print("HEAVY TASK START")
48
66
 
67
+ # 10秒間待つ
68
+
69
+ for _ in range(100):
70
+
49
- time.sleep(10) # 10秒間待つ
71
+ time.sleep(0.1)
72
+
73
+
74
+
75
+ # イベントループを動かす
76
+
77
+ # app.processEvents()
78
+
79
+
50
80
 
51
81
  print("HEAVY TASK DONE")
52
82
 
@@ -58,7 +88,7 @@
58
88
 
59
89
  # 以下のコメントを外して動作を確認して見て下さい
60
90
 
61
- # QTimer.singleShot(3*1000, heavy_task)
91
+ QTimer.singleShot(3*1000, heavy_task)
62
92
 
63
93
 
64
94
 
@@ -76,6 +106,4 @@
76
106
 
77
107
  main()
78
108
 
79
-
80
-
81
109
  ```

1

コメントとソースの内容が一致していなかったので修正

2020/06/05 13:41

投稿

teamikl
teamikl

スコア8742

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  # 以下のコメントを外して動作を確認して見て下さい
60
60
 
61
- QTimer.singleShot(3*1000, heavy_task)
61
+ # QTimer.singleShot(3*1000, heavy_task)
62
62
 
63
63
 
64
64