【问题标题】:How to Assign the Kivy Input Text to a variable immediately on pressing Enter?如何在按下 Enter 后立即将 Kivy 输入文本分配给变量?
【发布时间】:2020-07-14 08:59:37
【问题描述】:

我正在尝试为个人助理创建用户界面。
我希望用户输入文本,当他按下回车键时,我想做一些事情('说打印文本')并自动清除输入字段。 这是我的代码:

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.floatlayout import FloatLayout
from kivy.properties import ObjectProperty
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
class TetraApp(App):

    def build(self):
        Window.size=(875,600)
        Window.clearcolor = (0, 1, 1, 1)
        b = BoxLayout(orientation ='vertical')
        self.t = TextInput(hint_text='Say Something...', size_hint=(1,0.1), multiline=False)
#the multiline disables on enter. i want it to do a process on enter.
        b.add_widget(self.t)
        # code here to go to enterClicked() when enter is pressed and to clear input field
        Window.borderless=True
        return b
    def enterClicked(self):
        if 'hello' in self.t.text:
            print("hello user")
if __name__=='__main__':
    app=TetraApp()
    app.run()

我找不到任何教程。

【问题讨论】:

    标签: python python-3.x error-handling kivy


    【解决方案1】:

    您可以尝试像这样将操作绑定到您的 TextInput:

    self.t = TextInput(hint_text='Say Something...', size_hint=(1,0.1),multiline=False)
    self.t.bind(on_text_validate=self.enterClicked)
    b.add_widget(self.t)
    def enterClicked(self,t):
        if 'hello' in self.t.text:
            print("hello user")
        self.t.text=''
    

    on_text_validate 操作仅在 multiline=False 模式下当用户点击“回车”时触发。

    要清除输入字段,请尝试创建一个清除文本的方法(类似于您的enterClicked)并使用 on_text_validate 将此方法也绑定到 TextInput。让我知道它是否有效。

    【讨论】:

    • 但是我如何重新集中注意力?
    • self.t.text=''下方,可以尝试添加:self.t.focus = True
    • 我现在该怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多