Как динамически отображать текст на экране в Kivy с помощью kivymd? - PullRequest
0 голосов
/ 11 июля 2020

Я пытаюсь создать чат-бота. Я создал пользовательский интерфейс, и в нем есть текстовое поле ввода и кнопка, привязанная к текстовому полю, при нажатии которой создается ответ в соответствии с вводом, введенным пользователем. Я сохраняю этот ответ в глобальной переменной с именем response, и я хочу отобразить этот ответ на экране. Я использовал для этого следующий фрагмент кода, но он не работает. (Я предполагаю, что он показывает начальное значение переменной response, которая представляет собой пустую строку.)

text = MDLabel(text=reply,pos_hint={'center_x': 0.9, 'center_y': 0.05})
screen.add_widget(text)

Как сделать так, чтобы виджет экрана постоянно обновлялся, чтобы отображалось текущее значение переменной response. Вот мой код:

from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivymd.uix.button import MDIconButton
from kivymd.uix.label import MDLabel
from kivy.lang import Builder
import helpers
from cbot import text
global reply
reply=""
class Bot(MDApp):
    def show_data(self,obj):
        question=self.username.text

        reply=text.chat.converse(question)
        print(reply)


    def build(self):
        self.theme_cls.primary_palette = "Green"
        screen = Screen()

        self.input = Builder.load_string(helpers.textfield)
        button = MDIconButton(icon="chevron-double-right",pos_hint={'center_x': 0.9, 'center_y': 0.05},on_release=self.show_data)
        text = MDLabel(text=reply,pos_hint={'center_x': 0.9, 'center_y': 0.05})

        screen.add_widget(self.input)
        screen.add_widget(button)
        screen.add_widget(text)

        return screen

print(reply)

Bot().run()

1 Ответ

0 голосов
/ 12 июля 2020

Если вы сохраните ссылку на свой MDLabel следующим образом:

self.text = MDLabel(text=reply,pos_hint={'center_x': 0.9, 'center_y': 0.05})

Затем в своем методе show_data() вы можете сделать:

self.text.text = reply
...