PyQt5: сочетания клавиш с QAction
Проще говоря - как мне сделать сочетания клавиш (для запуска функции) в PyQt5? Я вижу, я должен QAction
так или иначе, но я не могу соединить два и два, и все примеры не работают с PyQt5. Спасибо
3 ответа
Использование QShortcut
а также QKeySequence
классы как это:
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Window(QWidget):
def __init__(self, *args, **kwargs):
QWidget.__init__(self, *args, **kwargs)
self.label = QLabel("Try Ctrl+O", self)
self.shortcut = QShortcut(QKeySequence("Ctrl+O"), self)
self.shortcut.activated.connect(self.on_open)
self.layout = QHBoxLayout()
self.layout.addWidget(self.label)
self.setLayout(self.layout)
self.resize(150, 100)
self.show()
@pyqtSlot()
def on_open(self):
print("Opening!")
app = QApplication(sys.argv)
win = Window()
sys.exit(app.exec_())
Также можно просто написать
my_action.setShortcut(QKeySequence("Ctrl+Shift+A"))
Если у вас уже есть действие, определенное в другом месте.
Пример определения действия выглядит так:
from aqt import mw
def testFunction():
showInfo("Hello action!")
my_action = QAction("test", mw)
my_action.triggered.connect(testFunction)
my_action.setShortcut(QKeySequence("Ctrl+Shift+A"))
В зависимости от ваших потребностей он может быть более простым и мощным:
QShortcut( 'Shift+Ins', tree_view ).activated.connect( lambda : tree_view.add_row( 'next sibling' ) )
... передает строку 'next sibling' как параметр методу
tree_view.add_row
.
Также ознакомьтесь с разделом "Стандартные ярлыки " в QKeySequence: вероятно, обычно лучше придерживаться соглашений, специфичных для платформы (и не отменять их непреднамеренно...), если нет веской причины сделать иначе.