Автозаполнение Kivy TextInput.Как получить тот же результат, используя файл kv? - PullRequest
1 голос
/ 07 июня 2019

Я хотел бы использовать файл kv для TextInput в моем коде, но я не знаю, как получить тот же результат, как перевести эту строку кода:

text_input.bind(text=self.action)

кто-то можетпомогите мне?

from kivy.app import App
from kivy.lang import Builder
from textwrap import dedent

class MyApp(App):

    def action(self,instance,value):

        word_list = ["hello", "hi", "man", "girl"]

        self.root.suggestion_text = ''

        val = value[value.rfind(' ') + 1:]

        if not val:
            return
        try:
            word = [word for word in word_list
                    if word.startswith(val)][0][len(val):]
            if not word:
                return
            self.root.suggestion_text = word
        except IndexError:
            print('Index Error.')

    def build(self):
        text_input = Builder.load_string(dedent('''
            TextInput
        '''))
        text_input.bind(text=self.action)
        return text_input

if __name__ == "__main__":
    MyApp().run()

1 Ответ

0 голосов
/ 07 июня 2019

Вам необходимо связать событие on_text с помощью метода action, , используя ключевое слово app , чтобы сослаться на ваш экземпляр MyApp (app.action(args)) и синтаксис “:”:

from kivy.app import App
from kivy.lang import Builder
from textwrap import dedent


class MyApp(App):

    def action(self,instance,value):
        word_list = ["hello", "hi", "man", "girl"]
        self.root.suggestion_text = ''
        val = value[value.rfind(' ') + 1:]

        if not val:
            return
        try:
            word = [word for word in word_list
                    if word.startswith(val)][0][len(val):]
            if not word:
                return
            self.root.suggestion_text = word
        except IndexError:
            print('Index Error.')

    def build(self):
        text_input = Builder.load_string(dedent('''
            TextInput:
                on_text: app.action(self, self.text)
        '''))
        return text_input

if __name__ == "__main__":
    MyApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...