Почему Kivy не обновляет / обновляет мой экран, когда мне это нужно? - PullRequest
0 голосов
/ 06 мая 2020

У меня проблема:

Создан экран для отображения сообщений, которые приходят во время события синхронизации, которое может длиться, например, одну минуту. Примерно каждые две секунды будет приходить одно сообщение.

Я ожидал, что, когда сообщение будет получено, это сообщение будет немедленно напечатано.

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

.py:

class SyncScreen(Screen):
    content = StringProperty()

    def on_enter(self):
        self.content = "Synchronization messages"
        controller.synchronize(self.update_text)

    def update_text(self, msg):    # Callback
        self.content = self.content + msg

.kv:

<SyncScreen>:
    MDBoxLayout:
        orientation: "vertical"
        MDToolbar:
            title: "Synchronization"
        MDBoxLayout:
            orientation: "vertical"
            padding: 10
            TextInput:
                text: root.content
                size_hint: 1.0, 1.0
                multiline: True

1 Ответ

1 голос
/ 06 мая 2020

Ваша synchronize функция блокируется, Киви не может ничего нарисовать, пока не вернется. Запустите его в потоке или сделайте что-то вроде того, чтобы он возвращался (и переназначал) каждый кадр.

...