Python Kivy: игнорировать сочетания клавиш при вводе текста - PullRequest
0 голосов
/ 05 декабря 2018

Как можно игнорировать определенные сочетания клавиш при вводе текста?

Я хочу иметь сочетания клавиш, например, '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 -" игнорируются,Проблема в том, что если в окне ввода текста есть выделенный текст, то этот выделенный текст удаляется.

На данный момент я не понял, как это исправить.

Есть лилучшее решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...