Python 在Tkinter主画布上打开cv2视频捕获画布并将其关闭
我有一个带有Python Tkinter的800x480大小的Python 在Tkinter主画布上打开cv2视频捕获画布并将其关闭,python,opencv,tkinter,Python,Opencv,Tkinter,我有一个带有Python Tkinter的800x480大小的main窗口gui。gui有一个create_image背景和两个create_window=按钮按钮 其中一个按钮启动Opencv4CamStreamcanvas,删除Main窗口canvas。用户在视频上的任何位置单击鼠标1后,视频画布将被破坏,视频设备将被释放 我的问题是“返回”到原始画布。原始画布main窗口在主程序中定义,并导入CamStream。当我试图在CamStream方法中调用MainWindow时,我得到一个错误,
main窗口
gui。gui有一个create_image
背景和两个create_window=按钮
按钮
其中一个按钮启动Opencv4CamStream
canvas,删除Main窗口
canvas。用户在视频上的任何位置单击鼠标1后,视频画布将被破坏,视频设备将被释放
我的问题是“返回”到原始画布。原始画布main窗口
在主程序中定义,并导入CamStream
。当我试图在CamStream
方法中调用MainWindow
时,我得到一个错误,说MainWindow
未定义(因为我在导入的类方法中调用它?)
也许有更好的方法?我认为导入的代码仍然在主程序中运行,因此主程序类对它来说是已知的
简化主程序:
import tkinter as tk
from PIL import Image, ImageTk
import numpy as np
import cv2
from videocapture import CamStream
root = tk.Tk()
class MainWindow:
def __init__(self, window):
self.window = window
self.canvas = tk.Canvas(window, width=800, height=480)
self.canvas.pack()
camButton = tk.Button(window, text = 'camera', command = lambda: self.canvas.destroy() | CamStream(window))
self.canvas.create_window(300,235, window=camButton, anchor = 'center')
MainWindow(root)
root.mainloop()
简化导入的videocapture
代码:
import tkinter as tk
import cv2
from PIL import Image, ImageTk
class CamStream:
def __init__(self, window):
self.canvas = tk.Canvas(window, width=800, height=480)
self.canvas.pack()
# And other stuff
def close_video(self, event):
if MyVideoCapture().vid.isOpened:
self.vid.vid.release()
self.canvas.destroy()
MainWindow(root) #####Problem creating main canvas ######
您编写的代码可以更好、更简单。我想您想打开视频摄像机,从模块opencv到Tkinter
画布
,然后点击视频播放上的按钮
关闭它。。。如果是,那么它可以比这更简单。另外,如果你在标题中提到了“cv2”,但你说的是“Opencv4”,那么告诉你使用的是哪个版本的opencv也有点混乱。请你的帖子来更正它。阅读而不是。destroy()
。萨阿德:是的,这正是我想要做的。我认为它是opencv4,但模块名为cv2。如何导入opencv?就像导入cv2一样yes我就是这样导入的。也许我应该在主程序中包含视频捕获文件代码