Как назначить входной текст Kivy переменной сразу после нажатия Enter? - PullRequest
1 голос
/ 02 апреля 2020

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

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()

Я не смог найти учебники для этого.

1 Ответ

2 голосов
/ 02 апреля 2020

Вы можете попытаться привязать действие к вашему 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 запускается только в многострочном режиме = False, когда пользователь нажимает «enter».

Чтобы очистить поле ввода, попробуйте создать метод, который очищает текст (аналогично вашему enterClicked) и привязать этот метод также к TextInput с помощью on_text_validate. Дайте мне знать, если это сработало.

...