Во-первых, когда речь заходит о фокусе, я думаю, это зависит от того, как вы загружаете экран. Это ваш root виджет или экран, который вы загружаете? Поскольку ваш виджет виджет root, вы, вероятно, захотите сделать это при запуске своего приложения. Вы можете использовать событие 'on_start' для этого
class MyApp(App):
def on_start(self,*args):
self.ids.mytextinput.focus = True #replace mytextinput with whatever id name you give to your text input in the kv string
Для ввода текста, запускающего события, когда вы набираете определенное количество цифр, которые вы можете использовать on_text. Для этого я думаю, что лучше всего создать экземпляр своего собственного класса, если вы только начинаете.
class KeyPadTextInput(TextInput):
def on_text(self,*args):
if len(self.text)==3:
#put your python code here
#you can launch MyApp functions by using app.function_name()
Еще одна вещь, которую я заметил, это то, что вы используете on_focus для запуска вашего собственного события '_on_focus' с тем же * арг. Вы могли бы добиться того же, удалив on_focus из вашей строки kv и отрегулировав событие on_focus класса, вызвав super (). On_focus (* args), чтобы унаследованная функция также запускалась следующим образом:
class KeyPadTextInput(TextInput):
def on_focus(self,*args):
#your code either before the super call
super().on_focus(*args)
#or your code after the super call
Hope это помогает направить вас в правильном направлении.
PS. TextInputs имеет несколько встроенных фильтров ввода, таких как фильтр, так что вы можете вводить только цифры! Это удобно, если клавиатура пользователя подходит или у нее есть доступ к ней. в строке kv просто добавьте
input_filter: 'int'