Python 的 Kivy:验证后重置焦点或将焦点锁定到文本输入字段
Kivy for Python: Resetting focus after validation or locking focus to a text input field
我正在 Kivy 开发一个 To Do-App:我有一个文本输入字段可以输入任务。然后,我按 Enter 确认。按 Enter 键会引发我的“确认”功能,其中包含 Kivys 内置的 on-text-validate-Function。这个“确认”-函数清除输入字段,在下面创建一个按钮,显示任务。如果按下按钮,它会自行删除。
这是我的问题:
按 Enter 确认我的输入后,文本输入字段失去焦点。我必须单击文本输入字段才能键入第二个任务,这非常不方便。
我希望文本输入字段始终保持焦点。
我试图通过在我的确认函数中包含一个 text_input.focus = True
来重置焦点。这没有用。
我还尝试使用 Kivys 时钟每 0.5 秒调用一次 text_input.focus = True
。这也没有用。
一般来说,我好像无法通过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()
TextInput
中的 属性 可以满足您的需求。参见documentation。 属性 是 text_validate_unfocus
。因此,您可以更改 MyTextInput
实例的创建以使用此 属性:
text_input = MyTextInput(
text ="",
multiline = False,
text_validate_unfocus = False,
on_text_validate = confirm)
我正在 Kivy 开发一个 To Do-App:我有一个文本输入字段可以输入任务。然后,我按 Enter 确认。按 Enter 键会引发我的“确认”功能,其中包含 Kivys 内置的 on-text-validate-Function。这个“确认”-函数清除输入字段,在下面创建一个按钮,显示任务。如果按下按钮,它会自行删除。
这是我的问题: 按 Enter 确认我的输入后,文本输入字段失去焦点。我必须单击文本输入字段才能键入第二个任务,这非常不方便。 我希望文本输入字段始终保持焦点。
我试图通过在我的确认函数中包含一个 text_input.focus = True
来重置焦点。这没有用。
我还尝试使用 Kivys 时钟每 0.5 秒调用一次 text_input.focus = True
。这也没有用。
一般来说,我好像无法通过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()
TextInput
中的 属性 可以满足您的需求。参见documentation。 属性 是 text_validate_unfocus
。因此,您可以更改 MyTextInput
实例的创建以使用此 属性:
text_input = MyTextInput(
text ="",
multiline = False,
text_validate_unfocus = False,
on_text_validate = confirm)