繁体   English   中英

Kivy for Python:验证后重置焦点或将焦点锁定到文本输入字段

[英]Kivy for Python: Resetting focus after validation or locking focus to a text input field

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

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

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

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

通常,我似乎无法通过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() 

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM