QShortcut и QKeySequence с Shift + Return в элементе QPlainTextEdit

У меня есть элемент, editorBox который имеет тип элемента PyQt5 QPlainTextEdit. Моя целевая цель - вызвать функцию, когда горячая клавишаShift + Return нажата, и моя цель с этой функцией состоит в том, чтобы она также вставляла текст в элемент editorBox (это не та часть, о которой я беспокоюсь, это довольно легко сделать с помощью .insertPlainText() метод).

Я провел поиск, и ближайший результат, который я смог найти, заключался в использовании QShortcut & QKeySequence в паре так:

# Initialize the QShortcut class
self.keybindShiftEnter = QShortcut(QKeySequence("Shift+Return"), self)
# Connect the shortcut event to a lambda which executes my function
self.keybindShiftEnter.activated.connect(lambda: self.editorBox.insertPlainText("my text to insert"))

Для пояснения я пробовал использовать другие символы в QKeySequence конструктор, например Ctrl+b, и мне это удалось. Как ни странно, только комбинацияShift+Return у меня не работает.

Я проанализировал проблему с моей ошибкой. Некоторые из просмотренных мною сообщений:

1 ответ

Решение

Решил свою проблему:

# ... editorBox Initialization code ...
self.editorBox.installEventFilter(self)

# Within App class
def eventFilter(self, obj, event):
    if obj is self.editorBox and event.type() == QEvent.KeyPress:
        if isKeyPressed("return") and isKeyPressed("shift"):
            self.editorBox.insertPlainText("my text to insert")
            return True
    return super(App, self).eventFilter(obj, event)

Что я здесь делаю, так это устанавливаю функцию фильтра - в основном, каждый раз, когда нажимается клавиша (любая клавиша, включая пробел /backspace/ и т. Д.), Она вызывает eventFilterфункция. Первоеifутверждение гарантирует, что фильтр будет проходить только в том случае, если это нажатие клавиши (не совсем уверен, нужна ли эта часть, я не думаю, что щелчки вызывают функцию). После этого я используюisKeyPressed функция (переименованная версия keyboard модуль is_pressedфункция), чтобы определить, удерживается ли текущая клавиша. Сand оператор, я могу использовать его для создания комбинаций клавиш.

Другие вопросы по тегам