回答編集履歴
2
ループ中にイベントループを止めない方法を追記。repl.it にコードを追加
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(1
|
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
|
-
|
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
コメントとソースの内容が一致していなかったので修正
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
|
|