Не удается удалить ярлык TkInter с помощью OpenCV - PullRequest
0 голосов
/ 03 июля 2018

Что я пытаюсь сделать:

Hello. Я создаю графический интерфейс, который содержит камеру и вид карты. Во-первых, я хотел бы управлять графическим интерфейсом с помощью «F1» и «F2».

Проблема:

Моя проблема в том, что я не могу удалить / удалить ярлык, когда нажимаю F2. Нет проблем с нажатием клавиши F1. Я пытался использовать packname.pack (), затем packname.forget_pack (), но ничего не произошло. Кроме того, когда я пытаюсь использовать packname.destroy (), рамка останавливается, но экран все еще там. (В графическом интерфейсе)

Как я могу решить эту проблему?

Код:

 import sys

if sys.version_info[0] == 2:
    import Tkinter as tk
else:
    import tkinter as tk

from PIL import ImageTk
import cv2
from PIL import Image


class UI(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.maxsize(width = 500, height = 500)
        self.minsize(width = 500 , height = 500)
        self.cap = cv2.VideoCapture(1)
        self.geometry("500x500")
        self.title('Test1')
        self.camera_view = tk.Frame(self)
        self.camera_on= self.bind("<F1>", self.camera)
        self.bind("<F2>", self.remove_camera)


    def camera(self, event=None):

        _, frame = self.cap.read()
        frame = cv2.flip(frame, 1)
        frame = cv2.resize(frame, (0, 0), fx=0.75, fy=0.65)
        cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
        img = Image.fromarray(cv2image)
        imgtk = ImageTk.PhotoImage(image=img)
        self.camera_label = tk.Label(image=imgtk)
        self.camera_label.imgtk = imgtk
        self.camera_label.after(10, self.camera)
        self.camera_label.place(x=10, y=100)


    def remove_camera(self, event=None):
        self.camera_label.place_forget()

UI().mainloop()  

1 Ответ

0 голосов
/ 04 июля 2018

Решение:

Мы не можем использовать привязку для функции потоковой камеры. Нам нужна функция управления для добавления или удаления. Вот пример:

import sys

if sys.version_info[0] == 2:
    import Tkinter as tk
else:
    import tkinter as tk

from PIL import ImageTk
from goompy import GooMPy
import cv2
import numpy as np
from PIL import Image
import PIL



class UI(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)
        self.maxsize(width = 800, height = 640)
        self.minsize(width = 800 , height = 640)
        self.cap = cv2.VideoCapture(1)
        self.geometry("800x640")
        self.title('Testing1')
        self.arka_plan = tk.Frame(self, bg='#2a2a2a')
        self.arka_plan.pack(fill='both', expand='yes')
        ##self.logo_label.place(x=150, y=0)
        self.camera_label = tk.Label(self)
        self.bind("<F1>", self.control)
        self.bind("<F2>", self.control)
        self.bind("<F3>", self.control)


    def camera(self):

        _, frame = self.cap.read()
        frame = cv2.flip(frame, 1)
        frame = cv2.resize(frame, (0, 0), fx=1.24, fy=1.32)
        cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
        img = Image.fromarray(cv2image)
        imgtk = ImageTk.PhotoImage(image=img)
        self.camera_label.imgtk = imgtk
        self.camera_label.configure(image=imgtk)
        self.camera_label.after(10, self.camera)


    def control(self, event = None):
        if event.keysym == 'F1': ##kamera calistirilirsa
            self.camera_label.place(x = 0, y = 0)

        elif event.keysym == 'F2': 

            self.camera_label.place_forget()

    def check_quit(self, event):
        pass

app = UI()
app.camera()
app.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...