我的kivy应用程序有近100个屏幕。我正在使用ScreenManager在启动时加载屏幕(下面的代码),但这导致应用程序需要30秒才能加载。是否有一种更有效的方式来处理kivy中的屏幕,因此屏幕仅在需要时加载而不是在应用程序启动时加载所有屏幕?我已经看过kivy的switch_to(),但是我不确定如何在Button小部件中使用它而不是on_press: root.manager.current = 'login'
,或者如果switch_to()甚至适合这个用例。在具有多个屏幕的kivy应用程序中,有效加载和切换屏幕的最佳做法是什么?
class LoginScreen(Screen):
...
class GameApp(App):
sm = ScreenManager()
def build(self):
self.sm.add_widget(LoginScreen(name='login'))
self.sm.add_widget(SignUpScreen(name='signup'))
...
答案 0 :(得分:3)
我的kivy应用程序有近100个屏幕。我正在使用ScreenManager在启动时加载屏幕(下面的代码),但这导致应用程序需要30秒才能加载。是否有更有效的方法来处理kivy中的屏幕,因此屏幕仅在需要时加载而不是在应用启动时加载所有屏幕?
是的,自行编码屏幕缓存,例如用您自己的方法做任何你想做的事情(例如,如果存在太多,则卸载屏幕,如果它还不存在则创建新屏幕,通过设置.current
等显示新屏幕。)
我见过kivy的switch_to()
switch_to()
只需要一个新屏幕,完全删除旧屏幕并显示新屏幕(不像只设置.current
,它不会完全删除旧屏幕)。您可能会发现它很方便,但它并不能直接解决您的问题。