You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Tkinter的带播放列表视频播放器仅能播放首尾视频求助

问题分析与修复

你的代码有两个关键问题导致只能播放首尾视频:

  1. 视频路径不完整
    你通过os.walk获取的只是文件名,没有拼接文件所在的目录路径。TkinterVideo需要完整路径才能找到视频文件,中间的视频因为路径错误加载失败,触发<<Ended>>事件后直接跳到下一个,直到迭代器走到最后一个元素。

  2. 路径字符串未处理转义
    origem = "C:\Python\Estudos\Videos"中的反斜杠会被Python解析为转义字符,可能导致路径识别错误,部分视频无法被正确遍历到。


修复后的代码

import functools
import tkinter as tk
from tkVideoPlayer import TkinterVideo
import os

# 用原始字符串避免路径转义问题
origem = r"C:\Python\Estudos\Videos"
lista = []
# 遍历文件夹,存储完整视频路径
for root_dir, _, files in os.walk(origem):
    for arquivo in files:
        full_path = os.path.join(root_dir, arquivo)
        # 过滤常见视频格式,避免加载非视频文件
        if full_path.lower().endswith(('.mp4', '.avi', '.mov', '.mkv')):
            lista.append(full_path)

def load_v(video):
    try:
        videoplayer.load(video)
        print(f"已加载: {video}")
    except Exception as e:
        print(f"加载失败: {video}, 错误: {e}")

def play_v():
    videoplayer.play()

def play_next_video(event, videoplayer, playlist):
    next_video = next(playlist, None)
    print('下一个视频:', next_video)
    if not next_video:
        print("播放完成")
        return
    load_v(next_video)
    play_v()

if __name__ == "__main__":
    root = tk.Tk()
    root.geometry("{0}x{1}+0+0".format(root.winfo_screenwidth(), root.winfo_screenheight()))
    root.overrideredirect(True)
    videoplayer = TkinterVideo(master=root, scaled=True)
    videoplayer.pack(expand=True, fill="both")

    if not lista:
        print("未找到任何视频文件")
        root.destroy()
    else:
        playlist = iter(lista)
        first_video = next(playlist)
        load_v(first_video)
        play_v()
        videoplayer.bind("<<Ended>>", functools.partial(play_next_video, videoplayer=videoplayer, playlist=playlist))
    root.mainloop()

优化点说明

  • 存储视频的完整路径,确保TkinterVideo能准确定位文件。
  • 使用原始字符串处理路径,避免转义错误。
  • 添加视频格式过滤,跳过非视频文件。
  • 增加异常捕获和状态打印,方便调试问题。
  • 增加空列表判断,避免无视频时程序空跑。

内容的提问来源于stack exchange,提问作者Saulo Somavilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 23:47:16