猿问

Python tkinter 的视频播放器,当我暂停视频时,我无法重新播放

我正在创建 GUI 来播放视频文件。问题是当我暂停视频时,播放按钮无法重新播放该视频,我必须再次选择视频文件。


注意:因为我想在同一个 tkinter 窗口中显示视频,所以我不使用 OpenCV imshow 命令。相反,我使用“window.after”方法。


以下是我的代码:


我尝试使用“self.pause”变量来控制暂停状态。当我单击暂停按钮时,这个布尔变量变为 True。但是,当我再次单击“播放”按钮时,我找不到合适的位置将其设为 False。


from tkinter import *

from tkinter import messagebox

from tkinter import filedialog

import PIL.Image, PIL.ImageTk

import cv2



class videoGUI:


    def __init__(self, window, window_title):


        self.window = window

        self.window.title(window_title)


        top_frame = Frame(self.window)

        top_frame.pack(side=TOP, pady=5)


        bottom_frame = Frame(self.window)

        bottom_frame.pack(side=BOTTOM, pady=5)


        self.pause = False   # Parameter that controls pause button


        self.canvas = Canvas(top_frame)

        self.canvas.pack()


        # Select Button

        self.btn_select=Button(bottom_frame, text="Select video file", width=15, command=self.open_file)

        self.btn_select.grid(row=0, column=0)


        # Play Button

        self.btn_play=Button(bottom_frame, text="Play", width=15, command=self.play_video)

        self.btn_play.grid(row=0, column=1)


        # Pause Button

        self.btn_pause=Button(bottom_frame, text="Pause", width=15, command=self.pause_video)

        self.btn_pause.grid(row=0, column=2)


        self.delay = 15   # ms


        self.window.mainloop()



    def open_file(self):


        self.pause = False


        self.filename = filedialog.askopenfilename(title="Select file", filetypes=(("MP4 files", "*.mp4"),

                                                                                         ("WMV files", "*.wmv"), ("AVI files", "*.avi")))

        print(self.filename)


如果我在“play_video”函数中编写以下代码:


self.pause = False

暂停按钮不起作用。因为“window.after”方法会自动调用“play_video”函数并使“self.pause”为False。因此,暂停按钮将不起作用。


守候你守候我
浏览 311回答 3
3回答

繁星coding

只需添加 play_video(self) 方法:if self.pause == True:    self.pause = False    return
随时随地看视频慕课网APP

相关分类

Python
我要回答