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

Kivy中GIF单次播放后自动切换屏幕的实现求助

解决方案:Kivy中GIF启动页单次播放后自动切屏

一、修复GIF起始位置异常问题

Kivy加载GIF时偶尔会因缓存或加载顺序导致起始帧错乱,通过在屏幕进入时强制重置动画帧即可解决:

  • 在FinalRoundAnimation的on_enter方法中,将GIF的anim_index设为0,强制从第一帧开始播放。

二、实现单次播放后自动切屏

放弃硬编码时长的方式,通过计算GIF总帧数和单帧延迟得到准确播放时长,再用Clock.schedule_once调度切屏;同时避免之前的调用错误(不要给方法加括号)。

修改后的完整代码

Python文件

from kivy.uix.screenmanager import Screen
from kivy.clock import Clock

class FinalRoundAnimation(Screen):
    def on_enter(self, *args):
        # 重置GIF到第一帧,解决起始位置异常
        gif = self.ids.gif
        gif.anim_index = 0
        # 计算GIF总播放时长(帧数 × 单帧延迟)
        total_frames = len(gif.image.textures)
        total_duration = total_frames * gif.anim_delay
        # 调度切屏,加0.1秒缓冲避免提前切换
        Clock.schedule_once(self.change_screen, total_duration + 0.1)
    
    def change_screen(self, *args):
        # 切换到目标屏幕,确保ScreenManager中已注册该屏幕
        self.manager.current = 'main_game_trial'

# 主游戏屏幕示例(根据你的实际代码调整)
class MainGameTrial(Screen):
    pass

Kivy文件

<FinalRoundAnimation>
    name: 'final_round_animation'
    FloatLayout:
        size: 1280, 720
        Image:
            id: gif
            source:'Final Round Animation.gif'
            anim_delay: 0.03
            allow_stretch: True
            keep_ratio: False
            # 禁用无限循环,设为1表示播放一次后停止
            anim_loop: 1

主App文件(确保ScreenManager正确配置)

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager

class MyGameApp(App):
    def build(self):
        sm = ScreenManager()
        # 添加动画屏幕和主游戏屏幕
        sm.add_widget(FinalRoundAnimation(name='final_round_animation'))
        sm.add_widget(MainGameTrial(name='main_game_trial'))
        return sm

if __name__ == '__main__':
    MyGameApp().run()

关键注意事项

  1. 避免Clock.schedule_once的调用错误:之前的Clock.schedule_once(self.change_screen(), 6)会立即执行change_screen,正确写法是Clock.schedule_once(self.change_screen, 6)(不带括号)。
  2. 确保屏幕名称一致:ScreenManager中添加的屏幕名称必须和self.manager.current设置的名称完全匹配,否则会出现No Screen with name错误。
  3. 关于anim_loop:设为1表示GIF播放一次后停止,若之前设置后无法播放,检查GIF是否为标准格式(Canva导出的GIF通常没问题,可尝试重新导出)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 23:12:37