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

Tkinter单按钮实现视频播放与页面跳转故障排查

问题分析与解决方案

核心问题出在Page2中错误创建了新的Page3实例:你在Page2的__init__里新建了nextpage = Page3(parent, controller),但GUI框架已经在初始化时创建了Page3的实例并存在controller.frames中。你调用的是这个新实例的play_video,而非界面上实际显示的那个Page3实例的方法,所以视频不会播放。

修正步骤

1. 修改Page2代码,复用已有Page3实例

删除自己创建的Page3对象,直接从controller的frames字典中获取已初始化的Page3实例:

import tkinter as tk
from tkinter import *
from page3 import *

class Page2(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        
        DF = Listbox(self, bg='#f8f8f8',height=30, width=70, highlightthickness=0, borderwidth=0)
        DF.place(x=0, y=0) 

        # 直接获取GUI中已存在的Page3实例
        page3_instance = controller.frames[Page3]
         
        button = Button(
            DF, 
            text="press",
            bg='#ffffff', 
            height=4, 
            width=30,
            # 先切换页面,再调用对应实例的播放方法
            command=lambda: [controller.show_frame(Page3), page3_instance.play_video()],
              )
        button.place(relx=0.5, rely=0.5, anchor=CENTER)

2. 给Page3添加视频重置方法

在Page3类中新增reset_video方法,用于将视频恢复到开头,同时可以在播放前先重置,避免视频播放到末尾后无法重新播放:

import tkinter as tk
from tkinter import *
from tkVideoPlayer import TkinterVideo

class Page3(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        
        DF2 = Listbox(self, bg='green',height=30, width=70, highlightthickness=0, borderwidth=0)
        DF2.place(x=0, y=0) 

        self.vid_player = TkinterVideo(DF2, scaled = True)
        self.vid_player.place(x=0, y=0)
        self.vid_player.load("Location_of_MP4.mp4")
        
    def play_video(self):
        # 播放前先重置到开头
        self.reset_video()
        print("working")
        self.vid_player.play()
        
    def reset_video(self):
        # 将视频进度设置为0,回到开头
        self.vid_player.seek(0)

3. 验证逻辑

  • GUI初始化时,所有页面实例已创建并存入controller.frames
  • 点击Page2的按钮时,先调用controller.show_frame(Page3)切换到显示的Page3实例,再调用该实例的play_video,此时操作的是界面上的视频播放器
  • reset_video方法通过seek(0)将视频拉回开头,解决视频播放完毕后无法重启的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:45:01