【发布时间】:2018-07-03 01:20:36
【问题描述】:
我想要做什么:
你好。我正在创建一个包含相机和地图视图的 GUI。首先,我想用“F1”和“F2”来控制GUI。
问题:
我的问题是按 F2 时无法删除/移除标签。按F1没有问题。我尝试使用 packname.pack() 然后 packname.forget_pack() 但什么也没发生。 此外,当我尝试 packname.destroy() 时,框架停止但屏幕仍然存在。(在 GUI 上)
我该如何解决这个问题?
代码:
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()
【问题讨论】:
-
我没有看到任何名为
packname的东西。但是,您每秒创建一个新相机标签的次数是您按 F1 的次数的 100 次,但只保留对最后一个标签的引用。不仅如此,你还没有破坏它。您只是将其从视图中删除,这会导致内存泄漏,因为每秒 100 个标签加起来很快。如果每次创建标签时增加一个全局计数器并在每次删除它时减少它,您可以很容易地看到这一点。 -
感谢您的建议。我更改了流媒体相机设置并解决了。
标签: python opencv user-interface tkinter camera