Открытие холста видеозахвата cv2 поверх основного холста Tkinter и его закрытие - PullRequest
2 голосов
/ 16 мая 2019

У меня есть 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  ######
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...