【问题标题】:Tkinter Video PlaylistTkinter 视频播放列表
【发布时间】:2022-01-07 23:03:37
【问题描述】:

尝试使用 Tkinter 构建视频播放列表。 目前我有一个 mp4 数组,名称将传递到 tkintervideo 以加载。

我遇到了关于如何等待第一个视频结束才能转到第二个视频的问题。

root = Tk()    
playlist = ["New_Year_Champagne.mp4","demo.mp4","car.mp4"]
videoplayer = TkinterVideo(master=root, scaled=True, pre_load=False)
for item in playlist: 
    has_video_ended = False

    videoplayer.load(item)
    videoplayer.pack(expand=True, fill="both")
    videoplayer.play() # play the video
    videoplayer.bind("<<Ended>>", video_ended )
    
    root.update()
      
root.mainloop()

实际上,在执行 root.update() 之后,它会进入播放列表的下一个迭代。

我还能尝试什么?

【问题讨论】:

  • video_ended 事件处理函数是做什么的?

标签: python python-3.x tkinter


【解决方案1】:

问题是您在任何视频结束之前立即加载所有视频。您应该在 &lt;&lt;Ended&gt;&gt; 处理程序中加载下一个视频。

这是一个简单的例子:

import functools
import tkinter as tk
from tkVideoPlayer import TkinterVideo

def play_next_video(event, videoplayer, playlist):
    next_video = next(playlist, None)
    print('Next is:', next_video)
    if not next_video:
        return

    # Play new video only after end of current
    videoplayer.load(next_video)
    videoplayer.play()

if __name__ == "__main__":
    root = tk.Tk()
    videoplayer = TkinterVideo(master=root, scaled=True, pre_load=False)

    # Use 'iter' to work with 'next' in callback
    playlist = iter(["test.mp4", "videoplayback.mp4"])

    # After end of video, use callback to run next video from playlist
    videoplayer.bind(
        "<<Ended>>",
        functools.partial(
            play_next_video,
            videoplayer=videoplayer,
            playlist=playlist,
        ),
    )

    # Play first video from playlist
    videoplayer.load(next(playlist))
    videoplayer.pack(expand=True, fill="both")
    videoplayer.play()

    root.mainloop()

【讨论】:

  • 它有效,谢谢! :D 关于为什么视频滞后很多的任何线索?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多