【问题标题】:Kivy: Control + Backspace in TextInput to delete tokenKivy:TextInput 中的 Control + Backspace 删除标记
【发布时间】:2021-01-17 19:10:31
【问题描述】:

我正在尝试让我的 TextInput 框识别 ctrl+backspace 击键以退格整个令牌(就像大多数现代程序一样)。

到目前为止,我有这个:

class MyTextInput(TextInput):
    def keyboard_on_key_down(self, window, keycode, text, modifiers):
        """Run when a key is pressed down"""
        # Do backspace for single and ctrl+backspace for token
        if keycode[1] == 'backspace':
            if 'control' in modifiers:
                pass # Delete previous token

        return super(TabTextInput, self).keyboard_on_key_down(window, keycode, text, modifiers)

我不确定如何从光标中检测前一个标记并将其删除而不干扰do_backspace() 方法的现有行为。

仅供参考,我仍在使用 Kivy 1.11.1 和 Python 3.7。

【问题讨论】:

    标签: python python-3.x kivy


    【解决方案1】:

    这样的事情可能会奏效:

    def keyboard_on_key_down(self, window, keycode, text, modifiers):
        """Run when a key is pressed down"""
        # Do backspace for single and ctrl+backspace for token
        if keycode[1] == 'backspace':
            if 'ctrl' in modifiers:
                done = False
                while not done:
                    self.do_backspace()
                    cc, cr = self.cursor
                    line = self._lines[cr]
                    if cc == 0 or line[cc-1] == ' ':
                        done = True
                return True
    
        return super(MyTextInput, self).keyboard_on_key_down(window, keycode, text, modifiers)
    

    【讨论】:

    • 有效!谢谢!我将条件 line[cc-1] == ' ' 替换为 line[cc-1] in ' .-' 以更好地适应我的用例,但这只是吹毛求疵。
    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2020-09-16
    • 2019-04-07
    相关资源
    最近更新 更多