首页 > 解决方案 > Kivy for Python:验证后重置焦点或将焦点锁定到文本输入字段

问题描述

我正在 Kivy 中开发一个待办事项应用程序:我有一个文本输入字段可以输入任务。之后,我用 Enter 确认。按 Enter 会使用 Kivys 内置的文本验证功能提高我的“确认”功能。此“确认”- 功能清除输入字段,在下方创建一个按钮,显示任务。如果按钮被按下,它会自行删除。

这是我的问题:通过按 Enter 验证我的输入后,文本输入字段失去焦点。我必须单击文本输入字段才能键入第二个任务,这很不方便。我希望文本输入字段始终保持焦点。

我试图通过text_input.focus = True在我的确认功能中包含一个来重置焦点。这没有用。

我还尝试使用 Kivys 时钟text_input.focus = True每 0.5 秒调用一次。这也不起作用。

一般来说,我似乎无法通过text_input.focus = True.

我很想找到解决方案

  1. 验证我的输入时将焦点重置到我的文本输入字段或
  2. 将焦点锁定到我的文本输入字段。

我将在下面提供我的代码。谢谢!

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() 

标签: pythonkivyfocus

解决方案


这是一个TextInput你想要的属性。请参阅文档。该物业是text_validate_unfocus。因此,您可以更改MyTextInput实例的创建以使用此属性:

    text_input = MyTextInput(
        text ="",
        multiline = False,
        text_validate_unfocus = False,
        on_text_validate = confirm)

推荐阅读