Я новичок в Киви. Я работаю над этим кодом, и меня смущает, что делает функция bind.
В основном, код ниже генерирует ввод текста и распечатывает ввод пользователя.
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.textinput import TextInput
class LoginScreen(Widget):
def __init__(self, **kwargs):
super(LoginScreen, self).__init__(**kwargs)
self.username = TextInput(size = (300, 30), pos = (300, 30), multiline = False)
# self.username.bind(on_text_validate = self.on_enter) ### first line
self.username.bind(text= self.on_text) ### second line
self.add_widget(self.username)
def on_enter(instance, value, secondvalue):
print(secondvalue)
def on_text(instance, value, secondvalue):
print(secondvalue)
class ABCApp(App):
def build(self):
return LoginScreen()
if __name__ == "__main__":
ABCApp().run()
Вот что меня смущает. Почему только после распечатки secondvalue
я получу фактический ввод от пользователя? Что здесь делает функция bind
? Я посмотрел на документацию, но ничего не смог найти.
Также, если я переключу комментирование о том, что первая строка закомментирована, а вторая строка закомментирована, так что
self.username.bind(on_text_validate = self.on_enter) ### first line
# self.username.bind(text= self.on_text) ### second line
Теперь я ссылаюсь на функцию on_enter
после ввода текста и нажатия кнопки ввода. Однако тогда я получаю сообщение об ошибке:
TypeError: on_enter() missing 1 required positional argument: 'secondvalue'
Если я изменю функцию on_enter
, чтобы принять 2 аргумента,
def on_enter(instance, secondvalue):
print(secondvalue)
Теперь печатается <kivy.uix.textinput.TextInput object at 0x0000000003A432B8>
, но текст не восстанавливается.
Я запутался в том, что делает Киви на их сервере, и я не могу найти никаких ответов в их документации. Почему on_enter
принимает 2 аргумента, а on_text
3?