自动'焦点' of TextInput Kivy

时间:2015-10-16 17:26:50

标签: python kivy

我有一个textinput小部件,如下所示:

<ReaderWidget>:
    Label:
        text: 'Please scan EBT card'
        font_size: root.height/8
        size: self.texture_size
        bold: True
        color: 0, 0.70, 0.93, 1
    TextInput:
        focus: True
        password: True
        multiline: False
        cursor: 0, 0

基于用户按下另一个窗口小部件中的按钮,窗口小部件将动态添加到布局中。目前,用户必须在输入文本之前将鼠标/手指指向文本框,并且我希望光标位于文本框中以准备接收文本,而无需用户通过鼠标按下来指示。有没有办法做到这一点?

好像focus : True应该这样做。但它似乎并没有。

3 个答案:

答案 0 :(得分:1)

这在kivy 1.9.0中对我有用:

def show_keyboard(event):
    text_input.focus = True
Clock.schedule_once(show_keyboard)

如果直接设置text_input.focus,它似乎不起作用。也许这是kivy的一个错误?

答案 1 :(得分:1)

我知道这已经过时了,但是当我尝试做一些非常相似的事情时,我发现了这个问题。我添加TextInput(并设置它的焦点)的代码是在一个按钮的on_press处理程序中。按下会导致TextInput被添加到布局并且它的焦点设置,但是当按钮被释放时它将失去焦点。将我的代码移动到on_release修复了问题。

答案 2 :(得分:0)

我有同样的问题,但不是按钮,所以 on_release 不是一个选项。 如果你想用 on_touch_down 方法来做,你可以聚焦小部件并添加要忽略的当前触摸以进行聚焦:

def on_touch_down(self, touch):
    self.focus = True
    FocusBehavior.ignored_touch.append(touch)

当然你还需要导入FocusBehavior:

from kivy.uix.behaviors.focus import FocusBehavior

您可以在此处阅读更多信息:https://kivy.org/doc/stable/api-kivy.uix.behaviors.focus.html