我有一个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
应该这样做。但它似乎并没有。
答案 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