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: вероятно, обычно лучше придерживаться соглашений, специфичных для платформы (и не отменять их непреднамеренно...), если нет веской причины сделать иначе.

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