title: How to build a splash screen in Kivy with (or without) ScreenManager that switches automatically to the next Screen?
body: <p>I'm trying to create a "SplashScreen" with python and kivy. The idea is to start the program, show the SplashScreen as fast as possible, run some methods in background, then automatically switch to the "MainScreen". Thats the first moment where user input is possible and expected.</p>
  
  <p>The problem is, that every way I tried, I got following result: Program starts running, shows a blank white window, runs my methods, shows the SplashScreen, immediately switches to MainScreen.</p>
  
  <p>I simply don't get how to force kivy show the SplashScreen before running the methods I want. To clearify that: "SplashScreen" does not mean anthing fancy like transparency or stuff. Just another standard screen.</p>
  
  <p><strong>Here is my Code:</strong></p>
  
  <p>mainWindow.py</p>
  
  <pre><code>Builder.load_file("loadingscreen.kv")
  Builder.load_file("mainscreen.kv")
  
  class LoadingScreen(Screen):
      pass
  
  
  class MainScreen(Screen):
      pass
  
  
  class FaitApp(App):
  
      LoadingStartUp = None
  
      def build(self):
          self.root = ScreenManager()
          self.root.add_widget(LoadingScreen(name='LoadingScreen'))
          self.root.add_widget(MainScreen(name='MainScreen'))
          return self.root
  
      def on_start(self):
          self.LoadingStartUp = LoadingStartUp(self)
          Clock.schedule_once(self.LoadingStartUp.loadButtonImages,0)
          return
  
  if __name__ == '__main__':
      app = FaitApp()
      app.run()
      sys.exit()
  </code></pre>
  
  <p>loadingscreen.kv</p>
  
  <pre><code>#kivy 1.10.1
      &lt;LoadingScreen&gt;:
          canvas:
              Color:
                  rgba: 1, 1 , 0, 1
              Rectangle:
                  size: self.size
          Label:
              font_size: 42
              text: root.name
  </code></pre>
  
  <p>mainscreen.kv</p>
  
  <pre><code>#kivy 1.10.1
      &lt;MainScreen&gt;:
          canvas:
              Color:
                  rgba: 1, 1 , 0, 1
              Rectangle:
                  size: self.size
          Label:
              font_size: 42
              text: root.name
  </code></pre>
  
  <p>loadingStartUp.py</p>
  
  <pre><code>class LoadingStartUp(object):
  
      app = None
  
      def __init__(self, app):
          self.app = app
          return
  
      def loadButtonImages(self):
          log.debug('LoadingStartUp')
          log.debug('Waiting for everything ready!')
          sleep(5)
          self.app.root.current = 'MainScreen'
          return
  </code></pre>
  
  <p>I also tried to use <code>Clock.schedule_once()</code> within <code>build()</code> and <code>on_start()</code>. I even tried to load the sites without ScreenManager with <code>self.root = Builder.load_file()</code>. The result was the same every time as described above.</p>
  
  <p>It would be enought I think to detect when the SplashScreen is correctly shown on screen and run a method after that.</p>
  
  <p>Any solutions/hints/tipps/advices are very appreciated! Thanks!</p>