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
оператор, я могу использовать его для создания комбинаций клавиш.