首页 > 解决方案 > 在 Kivy 中使用 Gif 徽标加载屏幕

问题描述

我们可以使用 gif 标志加载屏幕 30 秒然后切换到其他屏幕吗?如果是,如何?

像这样的GIF:

在此处输入图像描述

标签: pythonpython-3.xkivykivy-languagekivymd

解决方案


您可以通过以下代码实现所需的输出

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.clock import Clock

from kivy.uix.screenmanager import ScreenManager, Screen, WipeTransition, FadeTransition, NoTransition
from kivy.uix.floatlayout import FloatLayout


Builder.load_string("""

<FirstScreen>:
    orientation: "vertical"
    Image:
        id: gif
        source: 'load.gif'
        pos: self.pos
        size_hint: None, None
        size: root.size
        allow_stretch: True
        keep_ratio: False
        anim_delay: -1
        anim_loop: 1
        
<SecondScreen>:
    orientation: "vertical"
    Label:
        text:"Second Screen"
        
""")


class FirstScreen(Screen, FloatLayout):
    secs = 0

    def __init__(self, **kwargs):
        super(FirstScreen, self).__init__(**kwargs)
        self.orientation = "vertical"
        Clock.schedule_interval(self.update_time, 1)

    def update_time(self, sec):
        self.secs = self.secs+1
        '''  30 seconds'''
        if self.secs == 30:
            self.manager.current = 'second'

    def on_enter(self):
        self.ids.gif.anim_delay = 0.10



class SecondScreen(Screen, FloatLayout):

    def __init__(self, **kwargs):
        super(SecondScreen, self).__init__(**kwargs)
        self.orientation = "vertical"


class ExampleApp(App):

    def build(self):
        sm = ScreenManager(transition=NoTransition())
        sm.add_widget(FirstScreen(name='first'))
        sm.add_widget(SecondScreen(name='second'))
        return sm


if __name__ == "__main__":
    ExampleApp().run()

用于anim_delay 延迟动画

参考检查如下:

https://kivy.org/doc/stable/api-kivy.clock.html

https://kivy.org/doc/stable/api-kivy.uix.screenmanager.html

https://kivy.org/doc/stable/api-kivy.uix.image.html


推荐阅读