如何删除Tkinter Python应用程序中的视频?

2024-06-09 09:07:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一个应用程序来显示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 = "")

我想从应用程序的主框架中删除视频。 对于image,我可以使用.config(image ="")删除,但现在它不起作用。有什么解决办法吗?谢谢你的帮助


Tags: pathimageconfigtrue应用程序视频defvideo
1条回答
网友
1楼 · 发布于 2024-06-09 09:07:44

从外观上看,您正在视频的每一帧中创建一个新的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()

相关问题 更多 >