Python Kivy:忽略文本输入中的键盘快捷键

时间:2018-12-05 05:07:06

标签: python kivy

如何忽略文本输入中的某些键盘快捷键?

我想要键盘快捷键,例如'ctrl +','ctrl-',并且希望它们在文本输入中正常工作。

也就是说,如果我专注于“文本输入”小部件,并且按下键盘上的两个键(“控制”和“ +”)的组合,那么我不希望将“ +”添加到键盘上。文字。

我尝试执行以下操作:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.textinput import TextInput

KV = """
BoxLayout
    MyTextInput

<MyTextInput>:
    font_size: 24
    text: 'This is my text input'

"""

class MyTextInput(TextInput):

    def __init__(self, **kwargs):
        super(MyTextInput, self).__init__(**kwargs)
        self.ctrl_down = False


    def is_ctrl(self,keycode):
        if keycode[0] == 306 or keycode[0] == 305: return True
        return False


    def keyboard_on_key_down(self, window, keycode, text, modifiers):
        if self.is_ctrl(keycode):
            self.ctrl_down = True
        return super(MyTextInput, self).keyboard_on_key_down(
            window, keycode, text, modifiers)

    def keyboard_on_key_up(self, window, keycode):
        if self.is_ctrl(keycode):
            self.ctrl_down = False
        return super(MyTextInput, self).keyboard_on_key_up(
            window, keycode)


    def insert_text(self, substring, from_undo=False):
        if self.ctrl_down and substring=='+' or substring=='-':
            return 
        return super(MyTextInput, self).insert_text(substring, from_undo=from_undo)




class MyApp(App):
    def build(self):
        self.root = Builder.load_string(KV)


MyApp().run()

在这里,基本上所有的东西都起作用,也就是说,简单地忽略了“ control +”和“ control-”的组合。问题是,如果在文本输入窗口中有选定的文本,则该选定的文本将被删除。

目前我还没有弄清楚如何解决它。

有更好的解决方案吗?

0 个答案:

没有答案