Динамическое удаление и загрузка экранного объекта в Киви - PullRequest
0 голосов
/ 12 октября 2018

В настоящее время я занимаюсь разработкой встроенной системы с помощью kivy.

Поэтому я обнаружил, что если я создаю много экранов, это сильно замедляет работу программы.

Есть ли хороший способдинамически управлять экранами, чтобы он не замедлялся?

Например, когда у меня есть 4 экрана в ScreenManager, как показано ниже,

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

Возможно ли:

  1. первая загрузка SCRN_LOADING первая.

  2. загрузка SCRN_IDLE и SCRN_CALCULATING при загрузке.

  3. при загрузкесделано, удалите SCRN_LOADING экранный объект.

  4. загружает SCRN_RESULT во время расчета.

  5. при возвращении в режим ожидания, удалите SCRN_RESULT экранный объект.

Я предполагаю, что это может улучшить производительность.

В настоящее время экран очень сильно отстает.Поэтому мне, возможно, придется перезапустить весь проект, используя C, если я не могу решить проблему с производительностью.

Пожалуйста, помогите мне!

1 Ответ

0 голосов
/ 17 октября 2018

Полагаю, вы можете объявить свои экраны вне kv, а затем добавить их, как требуется, в вашем менеджере экранов, в вашем kv

MyScreenManager:
    id: myscreenmanager
    transition: FadeTransition()

В вашем классе окон:

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)

Imна самом деле не привык к классу Clock, но я уверен, что он понадобится вам для правильной загрузки экранов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...