1
私はウェブカメラビューを使用し、取り込まれた画像を分析しています。ウィンドウを呼び出すことができ、ユーザーが新しいウィンドウでウェブカメラビューを見ることができる機能を導入したい彼らが望むべきか?しかし、私の試みでは、新しいウィンドウを開いたときにメインウィンドウのボタンがインスタンスにスワップします。何がうまくいかないの?ここでTkinter第2ウィンドウのウェブカメラビューを表示
は私の(作業)の例である:私の実際のコードと同様に、本実施例で
import Tkinter as tk
import cv2
from PIL import Image, ImageTk
class CamView():
def __init__(self, parent):
self.parent = parent
self.window = tk.Toplevel(parent)
self.window.protocol("WM_DELETE_WINDOW", self.close)
self.show_frame()
def show_frame(self):
imgtk = ImageTk.PhotoImage(image=self.parent.img)
lmain.imgtk = imgtk
lmain.configure(image=imgtk)
def close(self):
self.parent.test_frame = None
self.window.destroy()
root = tk.Tk()
root.bind('<Escape>', lambda e: root.quit())
lmain = tk.Label(root)
lmain.pack()
class Main(tk.Frame):
def __init__(self, parent):
self.test_frame = None
frame = tk.Frame.__init__(self,parent)
a = tk.Label(text='hello!').pack()
b = tk.Button(frame, text='open', command=self.load_window)
b.pack()
width, height = 800, 600
self.cap = cv2.VideoCapture(0)
self.cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
self.cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
self.do_stuff()
def do_stuff(self):
_, frame = self.cap.read()
frame = cv2.flip(frame, 1)
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
self.img = Image.fromarray(cv2image)
if self.test_frame != None:
self.test_frame.show_frame()
lmain.after(10, self.do_stuff)
def load_window(self):
self.test_frame = CamView(self)
control = Main(root)
root.mainloop()
- 私が新しいウィンドウをロードするとき、それは最初のウィンドウでウェブカメラのフレームを配置しているようです私はそれが欲しくないときに!
私はカメラやcv2を持っていないので、私はあなたのコードを実行することはできませんまたは残念なことに、この神秘的な問題について多くの助けを提供します。しかし、 'CamView'を' class CamView(object): 'を使って新しいスタイルのクラスにする必要があります。この変更はおそらく問題には影響しませんが、古いスタイルのクラスを使用することはまれです。また、 'self.test_frame is None'は' self.test_frame!= None'よりも優先されます。 –
アドバイスをいただきありがとうございます! – Sam