如何使用kivymd在Kivy中在屏幕上动态显示文本?

时间:2020-07-11 19:50:40

标签: python python-3.x user-interface kivy kivy-language

我正在尝试构建一个聊天机器人。我已经构建了UI,它具有一个输入文本字段和一个绑定到文本字段的按钮,当按下该按钮时,它将根据用户给出的输入生成响应。我将该响应存储在一个名为reply的全局变量中,并且希望在屏幕上显示该响应。 我使用下面的代码片段来做到这一点,但是它不起作用。 (我假设它显示的是变量reply的初始值,它是一个空字符串。)

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

如何使屏幕小部件不断更新自身,以便它显示变量响应的当前值。 这是我的代码:

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 :(得分:0)

如果您这样保存对MDLabel的引用:

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

然后,在您的show_data()方法中,您可以执行以下操作:

self.text.text = reply