Я пытаюсь создать "SplashScreen" с python и kivy.Идея состоит в том, чтобы запустить программу, показать SplashScreen как можно быстрее, запустить некоторые методы в фоновом режиме, а затем автоматически переключиться на «MainScreen».Это первый момент, когда пользовательский ввод возможен и ожидаем.
Проблема в том, что каждый раз, когда я пытался, я получал следующий результат: программа запускается, показывает пустое белое окно, запускает мои методы, показывает SplashScreen, немедленно переключается на MainScreen.
Я просто не понимаю, как заставить kivy показать SplashScreen перед запуском нужных мне методов.Чтобы прояснить это: «SplashScreen» не означает необычную фантазию, такую как прозрачность или что-то в этом роде.Просто еще один стандартный экран.
Вот мой код:
mainWindow.py
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()
loadingscreen.kv
#kivy 1.10.1
<LoadingScreen>:
canvas:
Color:
rgba: 1, 1 , 0, 1
Rectangle:
size: self.size
Label:
font_size: 42
text: root.name
mainscreen.kv
#kivy 1.10.1
<MainScreen>:
canvas:
Color:
rgba: 1, 1 , 0, 1
Rectangle:
size: self.size
Label:
font_size: 42
text: root.name
loadingStartUp.py
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
Я также пытался использовать Clock.schedule_once()
в пределах build()
и on_start()
.Я даже пытался загрузить сайты без ScreenManager с self.root = Builder.load_file()
.Результат был каждый раз таким же, как описано выше.
Было бы достаточно, я думаю, определить, когда SplashScreen правильно отображается на экране, и запустить метод после этого.
Любые решения / подсказки/ советы / советы очень ценятся!Спасибо!