【问题标题】:Kivy app with many screens多屏 Kivy 应用
【发布时间】:2014-09-14 03:19:58
【问题描述】:

我的 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'))
        ...

【问题讨论】:

    标签: python python-2.7 kivy


    【解决方案1】:

    我的 kivy 应用有近 100 个屏幕。我正在使用 ScreenManager 在启动时加载屏幕(下面的代码),但这导致应用程序需要 30 秒才能加载。是否有更有效的方式来处理 kivy 中的屏幕,以便仅在需要时加载屏幕,而不是在应用启动时加载所有屏幕?

    是的,自己编写缓存屏幕的代码,例如使用您自己的方法来做任何您想做的事情(例如,如果存在太多屏幕,则卸载屏幕,如果尚不存在则创建新屏幕,通过设置 .current 等显示新屏幕)

    我见过kivy的switch_to()

    switch_to() 只是获取一个新屏幕,完全删除旧屏幕,然后显示新屏幕(与仅设置 .current 不同,它不会完全删除旧屏幕)。您可能会觉得它很方便,但它并不能直接解决您的问题。

    【讨论】:

    • 非常感谢。不先在 app build() 方法中添加 kv 语言的屏幕,推荐的方法是什么?
    • 只需使用 add_widget,就像其他任何东西一样
    猜你喜欢
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多