Kivy:Shift+Tab 不适用于 TextInput

Kivy: Shift+Tab does not work with TextInput

我正在尝试通过按 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

用这个 post 解决了它: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

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

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

例如

...
   next.focus = True

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

docs

中有一些关于它的信息