前提・実現したいこと
Python3とtkinterを用いてGUIを作成しようとしたのですが、わからない点があったので質問させて頂きます。
やりたいこと
①:「startボタン」と「stopボタン」の2つのボタンが配置されているメインウィンドウの作成
②:「startボタン」を押すと、接続しているUSBカメラの映像をメインウィンドウ内に表示
③:「stopボタン」を押すと、②で表示されたUSBカメラの映像を消す(メインウィンドウは残したまま)
発生している問題・エラーメッセージ
①と②は色々なサイトを参考にして作成できたのですが、③の処理のところで
USBカメラの映像を消すことが出来なくて困っています。
現状「stopボタン」を押すとUSBカメラの映像はそのまま変化なしで、
以下のエラーメッセージで出ます。
Exception in thread Thread-8:
Traceback (most recent call last):
File "C:\Users\usr\Anaconda3\lib\threading.py", line 916, in _bootstrap_inner
self.run()
File "C:\Users\usr\Anaconda3\lib\threading.py", line 864, in run
self._target(*self._args, **self._kwargs)
TypeError: destroy() missing 1 required positional argument: 'panel'
該当のソースコード
Python3.6.4
1import cv2 2from PIL import Image 3from PIL import ImageTk 4import threading 5import tkinter as tk 6 7 8def button1_clicked(): 9 thread = threading.Thread(target=videoLoop, args=()) 10 thread.start() 11 12def button2_clicked(): 13 thread = threading.Thread(target=destroy, args=()) 14 thread.start() 15 16def destroy(panel): 17 panel.destroy() 18 19def videoLoop(mirror=False): 20 No=0 21 cap = cv2.VideoCapture(No) 22 cap.set(cv2.CAP_PROP_FRAME_WIDTH, 800) 23 cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 600) 24 25 while True: 26 ret, to_draw = cap.read() 27 if mirror is True: 28 to_draw = to_draw[:,::-1] 29 30 image = cv2.cvtColor(to_draw, cv2.COLOR_BGR2RGB) 31 image = Image.fromarray(image) 32 image = ImageTk.PhotoImage(image) 33 panel = tk.Label(image=image) 34 panel.image = image 35 panel.place(x=50, y=50) 36 37 return panel 38 39 40root = tk.Tk() 41root.geometry("1920x1080+0+0") 42 43button1 = tk.Button(root, text="start", bg="#fff", font=("",50), command=button1_clicked) 44button1.place(x=1000, y=100, width=400, height=250) 45 46button2 = tk.Button(root, text="stop", bg="#fff", font=("",50), command=button2_clicked) 47button2.place(x=1000, y=360, width=400, height=250) 48 49root.mainloop()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
python3.6.4
tkinter 8.6
Anaconda3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/20 00:55