在Kivy中动态删除和加载Screen对象

时间:2018-10-12 00:26:50

标签: python python-3.x kivy

我目前正在开发具有kivy功能的嵌入式系统。

因此,我发现如果我制作许多屏幕,它将大大降低程序运行速度。

有没有一种动态控制屏幕的好方法,这样它就不会变慢?

例如,当我在如下所示的ScreenManager中有4个屏幕时,

MyScreenManager:
    id: myscreenmanager
    transition: FadeTransition()
    SCRN_LOADING:
    SCRN_IDLE:
    SCRN_CALCULATING:
    SCRN_RESULT:

是否可以:

  1. 首先初始化加载SCRN_LOADING

  2. 在加载时加载SCRN_IDLESCRN_CALCULATING

  3. 完成加载后,移除SCRN_LOADING屏幕对象。

  4. 在计算时加载SCRN_RESULT

  5. 返回空闲状态时,请移除SCRN_RESULT屏幕对象。

我猜这可以提高性能。

当前,屏幕滞后非常困难。因此,如果无法解决性能问题,则可能必须使用C重新启动整个项目。

请帮帮我!

1 个答案:

答案 0 :(得分:0)

我想您可以在kv之外声明屏幕,然后根据需要在屏幕管理器中将其添加到您的kv中

MyScreenManager:
    id: myscreenmanager
    transition: FadeTransition()

在您的Window类中:

from kivy.uix.screenmanager import ScreenManager, Screen

...
def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.sm = self.ids.myscreenmanager
    self.loading = Screen(name='SCRNLOADING')
    self.idle = Screen(name='SCRN_IDLE')
    self.calc = Screen(name='SCRN_CALCULATING')
    self.sm.add_widget(self.loading)
    self.set_idle()

def add_scrn(self):
    self.sm.add_widget(self.idle)
    self.sm.add_widget(self.calc)
    self.sm.remove_widget(self.loading)

我不太习惯Clock类,但是我敢肯定,在这里您需要它来正确加载屏幕