#python #kivy
Вопрос:
Как я могу изменить фокус курсора между символами ? Мой виджет добавляется /
, чтобы помочь записать дату, но фокус курсора остается за /
символом, который я добавил. Я хотел бы продвинуть это вслед за персонажем.
MVP:
from kivy.app import App
from kivy.uix.textinput import TextInput
def on_text(instance, value):
if len(value) == 2:
if value[:2].isdigit():
instance.text = "/"
if len(value) == 5:
if value[3:5].isdigit():
instance.text = "/"
print('The widget', instance, 'have:', value)
class MyApp(App):
def build(self):
text_input = TextInput()
text_input.bind(text=on_text)
return text_input
MyApp().run()
Ответ №1:
Более чистый подход состоит в том, чтобы просто обойти insert_text()
метод TextInput
. Вот измененная версия вашего кода, которая делает это:
from kivy.app import App
from kivy.uix.textinput import TextInput
class MyTextInput(TextInput):
def insert_text(self, substring, from_undo=False):
value = self.text substring
if len(value) == 2:
if value[:2].isdigit():
substring = "/"
if len(value) == 5:
if value[3:5].isdigit():
substring = "/"
return super(MyTextInput, self).insert_text(substring, from_undo=from_undo)
class MyApp(App):
def build(self):
text_input = MyTextInput()
# text_input.bind(text=on_text)
return text_input
MyApp().run()
Обратите внимание, что использование on_text()
метода для изменения text
результатов в дополнительных вызовах on_text()
и может легко привести к бесконечному циклу.