我已经创建了一个应用程序来显示Tkinter和Python的视频。我可以在应用程序中播放、暂停视频,但问题是现在我想将视频从应用程序中删除。我尝试了很多解决方案,但都不能删除。在我的应用程序中显示视频的代码:
def load_vid(path):
global stop
global frame_image
global vlabel
video = imageio.get_reader(path)
frame = 0
stop = Button(tab1, text="Stop",command=stop)
stop.place(x=350,y=370,anchor="e")
for image in video.iter_data():
frame += 1
image_frame = PIL.Image.fromarray(image)
image_frame.thumbnail((500,500))
try:
frame_image = ImageTk.PhotoImage(image_frame)
vlabel = Label(tab1,image=frame_image)
#vlabel.config(image=frame_image)
vlabel.image = frame_image
vlabel.place(x=50, y=210, anchor="w")
if stop == True:
break
except:
sys.exit()删除视频的函数:
def stop():
global stop
stop = True
print('stop')
vlabel.config(image = "")

我想从应用程序的主框架中删除视频。对于图像,我可以使用.config(image ="")删除,但现在它不起作用。有什么解决方案吗?谢谢你的帮助。
发布于 2019-10-06 01:57:06
从外观上看,您在视频的每一帧中创建了一个新的Label。
for image in video.iter_data():
...
try:
...
vlabel = Label(tab1,image=frame_image)
vlabel.place(x=50, y=210, anchor="w")
...
except:
...在不知道的情况下,可能会有成百上千个Label堆叠在上面,而您只是将最后创建的Label映像设置为None。
也许您应该从在循环外部创建Label开始,并且仅在迭代期间修改图像:
def load_vid(path):
...
stop = Button(tab1, text="Stop",command=stop)
stop.place(x=350,y=370,anchor="e")
vlabel = Label(tab1)
vlabel.place(x=50, y=210, anchor="w")
for image in video.iter_data():
...
try:
frame_image = ImageTk.PhotoImage(image_frame)
vlabel.config(image=frame_image)
vlabel.image = frame_image
if stop == True:
break
except:
sys.exit()https://stackoverflow.com/questions/58250652
复制相似问题