回答編集履歴

4

コード修正

2020/11/26 11:10

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- # POINT: 2回目以降の xrange は MainThread で実行されるのが確認できると思います
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=xrange, args=(root,), daemon=True)
125
+ thread = Thread(target=xfunc, args=(root,), daemon=True)
126
126
 
127
127
  thread.start()
128
128
 

3

追記: サンプルコードに関して

2020/11/26 11:10

投稿

teamikl
teamikl

スコア8664

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

関数名の修正

2020/11/25 07:24

投稿

teamikl
teamikl

スコア8664

test CHANGED
@@ -92,21 +92,21 @@
92
92
 
93
93
 
94
94
 
95
- def xrange(root):
95
+ def xfunc(root):
96
96
 
97
- logging.info("xrange")
97
+ logging.info("xfunc")
98
98
 
99
- root.after(1000, xrange, root)
99
+ root.after(1000, xfunc, root)
100
100
 
101
101
 
102
102
 
103
- def xrange2(root): # 別スレッドでの実行なら、1秒待つのには time.sleep が使えます
103
+ def xfunc2(root): # 別スレッドでの実行なら、1秒待つのには time.sleep が使えます
104
104
 
105
105
  import time
106
106
 
107
107
  while True:
108
108
 
109
- logging.info("xrange2")
109
+ logging.info("xfunc2")
110
110
 
111
111
  time.sleep(1)
112
112
 

1

コード追記、スレッド内であれば1秒待つのに time.sleep を使う

2020/11/25 07:06

投稿

teamikl
teamikl

スコア8664

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()