如何定义当用户在TextInput中输入文本并按下在Kivy中输入时会发生什么?

时间:2018-02-21 16:29:58

标签: python oop user-interface kivy kivy-language

我正在尝试使用Kivy和Python创建一个简单的Chatbot应用程序UI,但我陷入了第一阶段。 如何访问BoxLayout中的TextInput小部件以获取其内容?

我读到只要在TextInput上按“Enter”,就会调用函数 on_text_validate()。但是,下面的代码似乎没有起作用。

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import Screen, ScreenManager, FadeTransition
from kivy.uix.scrollview import ScrollView
from kivy.properties import StringProperty
from kivy.lang import Builder

Builder.load_string('''
#:import AnchorLayout kivy.uix.anchorlayout
#:import Layout kivy.uix.layout
<ChatBotScreen>:
    BoxLayout:
        orientation: 'vertical'

        ScrollView:
            Label:
                size_hint_y: None
                height: self.texture_size[1]
                text_size: self.width, None
                botOutput: root.botOutput
        ScrollView:
            Label:
                size_hint_y: None
                height: self.texture_size[1]
                text_size: self.width, None
                userInput: root.userInput
        TextInput:
            id: ti_userinput
            multiline: False
''')

class ChatBotScreen(Screen):
    userInput = StringProperty()
    botOutput = StringProperty()

    def on_text_validate(self):
        text_input_userInput = self.ids['ti_userinput'].text
        self.ids['ti_userinput'].text = ''
        print(text_input_userInput)

    def UserInput(self):
        pass
    def BotOutput(self):
        pass

sm = ScreenManager(transition=FadeTransition())
sm.add_widget(ChatBotScreen(name='mainchat'))    

class MyApp(App):
    def build(self):
        return sm

请指导我。

1 个答案:

答案 0 :(得分:1)

您的问题是,TaskScheduler不是on_text_validate类的方法,而是Screen的方法,因此您永远不会调用TextInput on_text_validate 1}}类,您可以做的是从ChatBotScreen的{​​{1}}事件中调用该方法:

on_text_validate