回答編集履歴
4
コード修正
test
CHANGED
@@ -88,7 +88,7 @@
|
|
88
88
|
|
89
89
|
|
90
90
|
|
91
|
-
# POINT: 2回目以降の x
|
91
|
+
# POINT: 2回目以降の xfunc は MainThread で実行されるのが確認できると思います
|
92
92
|
|
93
93
|
|
94
94
|
|
@@ -122,7 +122,7 @@
|
|
122
122
|
|
123
123
|
|
124
124
|
|
125
|
-
thread = Thread(target=x
|
125
|
+
thread = Thread(target=xfunc, args=(root,), daemon=True)
|
126
126
|
|
127
127
|
thread.start()
|
128
128
|
|
3
追記: サンプルコードに関して
test
CHANGED
@@ -165,3 +165,23 @@
|
|
165
165
|
これらの関数では、処理をすぐ終わり mainloop に制御を返さなければなりません。
|
166
166
|
|
167
167
|
ログを取ってみて、メインスレッドで時間の掛かる処理をしていないか調べて見ましょう。
|
168
|
+
|
169
|
+
|
170
|
+
|
171
|
+
----
|
172
|
+
|
173
|
+
追記
|
174
|
+
|
175
|
+
丁度最近、cv2.VideoCapture/tkinter での動作確認のために書いたコードがあったので、
|
176
|
+
|
177
|
+
解説等は出来ませんが、参考になればと思い張っておきます。
|
178
|
+
|
179
|
+
https://repl.it/@MiKLTea/tkVideoCanvas#main.py
|
180
|
+
|
181
|
+
|
182
|
+
|
183
|
+
- update() 関数を、サブスレッド側(cv2) とメインスレッド(tkinter)に分離する場合の参考になると思います。
|
184
|
+
|
185
|
+
- プログラムの終了時にエラーが出る場合は、状況次第ですが、
|
186
|
+
|
187
|
+
リソースの解放順序を明示的にする必要があります。
|
2
関数名の修正
test
CHANGED
@@ -92,21 +92,21 @@
|
|
92
92
|
|
93
93
|
|
94
94
|
|
95
|
-
def x
|
95
|
+
def xfunc(root):
|
96
96
|
|
97
|
-
logging.info("x
|
97
|
+
logging.info("xfunc")
|
98
98
|
|
99
|
-
root.after(1000, x
|
99
|
+
root.after(1000, xfunc, root)
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
-
def x
|
103
|
+
def xfunc2(root): # 別スレッドでの実行なら、1秒待つのには time.sleep が使えます
|
104
104
|
|
105
105
|
import time
|
106
106
|
|
107
107
|
while True:
|
108
108
|
|
109
|
-
logging.info("x
|
109
|
+
logging.info("xfunc2")
|
110
110
|
|
111
111
|
time.sleep(1)
|
112
112
|
|
1
コード追記、スレッド内であれば1秒待つのに time.sleep を使う
test
CHANGED
@@ -100,6 +100,18 @@
|
|
100
100
|
|
101
101
|
|
102
102
|
|
103
|
+
def xrange2(root): # 別スレッドでの実行なら、1秒待つのには time.sleep が使えます
|
104
|
+
|
105
|
+
import time
|
106
|
+
|
107
|
+
while True:
|
108
|
+
|
109
|
+
logging.info("xrange2")
|
110
|
+
|
111
|
+
time.sleep(1)
|
112
|
+
|
113
|
+
|
114
|
+
|
103
115
|
def main():
|
104
116
|
|
105
117
|
root = tk.Tk()
|