如何忽略文本输入中的某些键盘快捷键?
我想要键盘快捷键,例如“ ctrl +”,“ ctrl-”,并且希望它们在“文本输入”中正常工作。
也就是说,如果我专注于“文本输入”窗口小部件,并且在键盘上按了两个键(“控制”和“ +”)的组合,则我不希望将“ +”添加到文本中。
我尝试执行以下操作:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.textinput import TextInput
KV = """
BoxLayout
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-”的组合。 问题是,如果在文本输入窗口中有选定的文本,则该选定的文本将被删除。
目前,我还没有弄清楚如何解决它。
有更好的解决方案吗?