【问题标题】:Automatic 'focus' of TextInput KivyTextInput Kivy 的自动“焦点”
【发布时间】:2016-01-15 13:06:11
【问题描述】:

我有一个如下所示的文本输入小部件:

<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 应该这样做。但它似乎没有。

【问题讨论】:

    标签: python kivy


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这在 kivy 1.9.0 中对我有用:

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

      如果直接设置了text_input.focus,好像是不行的。也许这是 kivy 中的一个错误?

      【讨论】:

      • 就我而言,我需要延迟 0.2 秒才能使其工作(即 Clock.schedule_once(show_keyboard, 0.2)。共享,这样其他人就不需要像我一样卡住几个小时了。
      【解决方案3】:

      我有同样的问题,但不是按钮,所以 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

      【讨论】:

        猜你喜欢
        • 2017-04-04
        • 2017-12-18
        • 2017-06-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多