У меня есть MainWindow
графический интерфейс размером 800x480 с Python Tkinter. Графический интерфейс имеет create_image
фон и две кнопки create_window=button
.
Одна из кнопок запускает холст Opencv4 CamStream
, удаляя холст MainWindow
. После того, как пользователь щелкнет мышью 1 в любом месте видео, холст видео будет разрушен, а видеоустройство выпущено.
Моя проблема - «вернуться» обратно к исходному холсту. Исходный холст MainWindow
определен в основной программе, а CamStream
импортирован. Когда я пытаюсь вызвать MainWindow
внутри CamStream
метода, я получаю сообщение о том, что 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 ######