#python #kivy #focus
#python #kivy #фокус
Вопрос:
Я работаю над приложением для выполнения в Kivy: у меня есть поле ввода текста для ввода задачи. После этого я подтверждаю ввод. Нажатие Enter вызывает мою функцию «Подтвердить» с помощью встроенной функции проверки текста Kivys. Эта функция «Подтверждения» очищает поле ввода, создает кнопку ниже, которая показывает задачу. Если кнопка нажата, она удаляется сама.
Вот моя проблема: после проверки моего ввода нажатием Enter поле ввода текста теряет фокус. Мне пришлось бы щелкнуть в поле ввода текста, чтобы ввести вторую задачу, что довольно неудобно. Я хочу, чтобы поле ввода текста всегда сохраняло фокус.
Я попытался сбросить фокус, включив text_input.focus = True
в свою функцию подтверждения. Это не сработало.
Я также пытался использовать Kivys clock для вызова text_input.focus = True
каждые 0,5 секунды. Это тоже не сработало.
Как правило, я, похоже, не могу установить фокус с помощью text_input.focus = True
.
Я бы хотел найти решение либо
- сброс фокуса на мое поле ввода текста при проверке моего ввода или
- заблокируйте фокус на моем поле ввода текста.
Я приведу свой код ниже. Спасибо!
import kivy
kivy.require('1.9.0')
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.gridlayout import GridLayout
class MyTextInput(TextInput):
def on_parent(self, widget, parent):
self.focus = True
# Create the App class
class TutorialApp(App):
def build(self):
def confirm(self):
todo_element = Button(
text = text_input.text,
on_press = remove)
grid.add_widget(todo_element)
text_input.text = ""
#text_input.focus = True
def remove(self):
self.parent.remove_widget(self)
grid = GridLayout(
cols = 1,
row_default_height = 30,
row_force_default = True)
text_input = MyTextInput(
text ="",
multiline = False,
on_text_validate = confirm)
grid.add_widget(text_input)
return grid
# Run the App
if __name__ == "__main__":
TutorialApp().run()
Ответ №1:
Это свойство TextInput
, которое делает то, что вы хотите. Смотрите документацию. Свойство является text_validate_unfocus
. Таким образом, вы можете изменить свое создание MyTextInput
экземпляра, чтобы использовать это свойство:
text_input = MyTextInput(
text ="",
multiline = False,
text_validate_unfocus = False,
on_text_validate = confirm)
Комментарии:
1. Спасибо! Я почему-то этого не нашел.