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

如何实现Python Tkinter弹窗视频播放后自动关闭?

解决方案:Toplevel弹窗播放动画后自动关闭

问题原因

tkvideo的play()方法是异步执行的,直接调用destroy()会在视频开始播放前就执行,或者无法感知播放结束的时机。另外你设置了loop=1,但tkvideo的循环计数逻辑需要结合回调或事件监听才能正确触发关闭操作。

方案1:监听视频播放结束事件(精准关闭)

tkvideo在播放完设定的循环次数后,会向承载视频的Label组件发送<<tkvideoEnd>>事件,我们可以绑定这个事件来关闭窗口:

import tkinter as tk
from tkvideo import tkvideo

def close_window(event):
    window.destroy()

# 基于已有主根窗口创建Toplevel弹窗
window = tk.Toplevel()
window.title("Animation")

lbl_video = tk.Label(window)
lbl_video.pack()
# 绑定播放结束事件
lbl_video.bind("<<tkvideoEnd>>", close_window)

# loop=1表示播放1次后停止
player = tkvideo("Hero_Slash_Attack_Animation.mp4", lbl_video, loop=1, size=(500,500))
player.play()

# 注意:实际项目中无需单独调用此行,主根窗口已在运行mainloop
# window.mainloop()

方案2:强制延迟2秒关闭(简单粗暴)

如果不需要严格等待视频播放结束,只想固定2秒后关闭窗口,可以用tkinter的after()方法,它会在指定毫秒数后执行回调函数:

import tkinter as tk
from tkvideo import tkvideo

window = tk.Toplevel()
window.title("Animation")

lbl_video = tk.Label(window)
lbl_video.pack()

player = tkvideo("Hero_Slash_Attack_Animation.mp4", lbl_video, loop=1, size=(500,500))
player.play()

# 2000毫秒=2秒后执行窗口销毁
window.after(2000, window.destroy)

# 注意:实际项目中无需单独调用此行,主根窗口已在运行mainloop
# window.mainloop()

注意事项

  • 确保视频文件路径正确,可放在项目根目录或使用绝对路径
  • 实际项目中不要单独调用window.mainloop(),否则会和主根窗口的事件循环冲突
  • 若方案1的事件未触发,可检查视频是否能正常播放完毕,或尝试更新tkvideo到最新版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:09:59