【发布时间】:2018-02-21 16:29:58
【问题描述】:
我正在尝试使用 Kivy 和 Python 创建一个简单的聊天机器人应用程序 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
请指导我。
【问题讨论】:
-
我的问题是:你想什么时候得到文本?
-
@eyllanesc 我希望在输入 TextInput 字段后按 Enter/Return 键时获取文本。所以每次用户这样做时,我都希望更新值(调用函数)。
-
你想更新什么值?你的意思是什么功能?
-
@eyllanesc 我想要执行 on_text_validate 函数中的任何内容。所以我将文本的值存储在 text_input_userInput 变量中,打印它并清除当前的 TextInput 文本。
标签: python oop user-interface kivy kivy-language