回答編集履歴
2
ループ中にイベントループを止めない方法を追記。repl.it にコードを追加
answer
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
タイマーの動作確認用コード
|
2
2
|
|
3
|
+
(ブラウザ上で実行して動作確認できます)
|
4
|
+
https://repl.it/@MiKLTea/QTimer-and-EventLoop-demo
|
5
|
+
|
6
|
+
時間のかかる処理中にイベントループを動かす方法を追記。(コメント内)
|
7
|
+
|
8
|
+
設計から手を入れられる段階では、この方法は避けた方が良いと思いますが、
|
9
|
+
イベントループが行うはずだった処理を自分で組んだループ内で定期的に呼び出す事で、
|
10
|
+
イベントループの停止を回避できます。→ processEvents
|
11
|
+
|
3
12
|
```python
|
4
13
|
|
5
14
|
def main():
|
@@ -22,13 +31,19 @@
|
|
22
31
|
def heavy_task():
|
23
32
|
import time
|
24
33
|
print("HEAVY TASK START")
|
34
|
+
# 10秒間待つ
|
35
|
+
for _ in range(100):
|
25
|
-
|
36
|
+
time.sleep(0.1)
|
37
|
+
|
38
|
+
# イベントループを動かす
|
39
|
+
# app.processEvents()
|
40
|
+
|
26
41
|
print("HEAVY TASK DONE")
|
27
42
|
|
28
43
|
## XXX: 3秒後に時間のかかる処理を実行
|
29
44
|
#
|
30
45
|
# 以下のコメントを外して動作を確認して見て下さい
|
31
|
-
|
46
|
+
QTimer.singleShot(3*1000, heavy_task)
|
32
47
|
|
33
48
|
# 20秒後に終了
|
34
49
|
QTimer.singleShot(20*1000, app.quit)
|
@@ -37,5 +52,4 @@
|
|
37
52
|
|
38
53
|
if __name__ == '__main__':
|
39
54
|
main()
|
40
|
-
|
41
55
|
```
|
1
コメントとソースの内容が一致していなかったので修正
answer
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
## XXX: 3秒後に時間のかかる処理を実行
|
29
29
|
#
|
30
30
|
# 以下のコメントを外して動作を確認して見て下さい
|
31
|
-
QTimer.singleShot(3*1000, heavy_task)
|
31
|
+
# QTimer.singleShot(3*1000, heavy_task)
|
32
32
|
|
33
33
|
# 20秒後に終了
|
34
34
|
QTimer.singleShot(20*1000, app.quit)
|