Search code examples
pythonpython-3.xkivykivy-languagekivymd

Use Gif Logo For Loading Screen In Kivy


Can We Use gif logo for loading screen for 30 second and then switch to other screen ? if yes , how ?

like this gif:

enter image description here


Solution

  • You can achieve desired output from following code

    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()
    

    use anim_delay to delay the animation

    For Reference check following :

    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