Kivy:Shift+Tab 不适用于 TextInput

Posted

技术标签:

【中文标题】Kivy:Shift+Tab 不适用于 TextInput【英文标题】:Kivy: Shift+Tab does not work with TextInput 【发布时间】:2020-10-04 05:03:21 【问题描述】:

我正在尝试通过按 Shift+Tab 来向后循环浏览我的 TextInputs(我知道没什么特别的)。我只是不知道如何让它工作。它总是跳到下一个 TextInput。我在 Google 中没有找到任何内容。

此外,我希望在 focus=True 时选择整个 TextInput.text。也没有让它正常工作。

请帮帮我:-D

这是我的最小示例:

import kivy
kivy.require('1.11.0')
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder

Builder.load_string('''
<CustomInput@TextInput>:
    text: "Blindtext"
    size_hint_y: 0.1
    pos_hint: "center_y": 0.5
    multiline: False
    write_tab: False

<Box>:
    padding: 20,0,20,0
    spacing: 10

    CustomInput

    CustomInput

    CustomInput
''')

class Box(BoxLayout):
    pass

class TestApp(App):
    def build(self):
        return Box()

if __name__ == "__main__":
    TestApp().run()

非常感谢! 干杯, smarwin

【问题讨论】:

【参考方案1】:

通过这篇文章解决了这个问题:https://github.com/kivy/kivy/issues/6560

你必须在 focus.py 的keyboard_on_key_down 方法中将if ['shift'] == modifiers: 行改为if modifiers == 'shift':。您将在 uix/behaviors/ 的 kivy 文件夹中找到此文件。

    def keyboard_on_key_down(self, window, keycode, text, modifiers):
        if keycode[1] == 'tab':  # deal with cycle
            if ['shift'] == modifiers: 
                next = self.get_focus_previous()
            else:
                next = self.get_focus_next()
            if next:
                self.focus = False

                next.focus = True

            return True
        return False

没有保证,但到目前为止它对我来说效果很好。 干杯, smarwin

【讨论】:

【参考方案2】:

使用 smarwin 的解决方法,删除字符(带退格键)对我不起作用。

在最终 return False 之前调用 super 为我修复了它。

例如

...
   next.focus = True

   return True
super().keyboard_on_key_down(window, keycode, text, modifiers)
return False

docs 中有一些关于它的信息

【讨论】:

以上是关于Kivy:Shift+Tab 不适用于 TextInput的主要内容,如果未能解决你的问题,请参考以下文章

Kivy:在网格中分配动作/分类按钮

Kivy 自学笔记:构建基本的 Kivy 应用

Kivy 错误:[CRITICAL] [App] 无法获取窗口,中止

Kivy:如何定义在打开TabbedPanel时要激活哪个Tab

htaccess 文件不适用于特殊字符

引导选项卡不适用于 history.back 选项