Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Tkinter主画布上打开cv2视频捕获画布并将其关闭_Python_Opencv_Tkinter - Fatal编程技术网

Python 在Tkinter主画布上打开cv2视频捕获画布并将其关闭

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时,我得到一个错误,

我有一个带有Python Tkinter的800x480大小的
main窗口
gui。gui有一个
create_image
背景和两个
create_window=按钮
按钮

其中一个按钮启动Opencv4
CamStream
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我就是这样导入的。也许我应该在主程序中包含视频捕获文件代码