Как можно игнорировать определенные сочетания клавиш при вводе текста?
Я хочу иметь сочетания клавиш, например, 'ctrl +', 'ctrl-', и я хочу, чтобы они правильно работали при вводе текста.
То есть, если я фокусируюсь на виджете «Ввод текста» и нажимаю комбинацию из 2 клавиш - «control» и «+» - на клавиатуре, то я не хочу, чтобы «+» былдобавлено к тексту.
Я попытался сделать следующее:
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 -" игнорируются,Проблема в том, что если в окне ввода текста есть выделенный текст, то этот выделенный текст удаляется.
На данный момент я не понял, как это исправить.
Есть лилучшее решение?