PySide2 |Выяснение, какая QKeySequence была нажата - PullRequest
1 голос
/ 16 марта 2019

Я использую PySide2 и хочу иметь несколько ярлыков, которые выполняют ту же функцию, но также будут зависеть от того, какая клавиша была нажата.

Я попытался связать функции как таковые внутри QMainWindow:

QtWidgets.QShortcut(QtGui.QKeySequence("1"),self).activated.connect(self.test_func)
QtWidgets.QShortcut(QtGui.QKeySequence("2"),self).activated.connect(self.test_func)

Так, что они оба выполняют эту функцию.

def test_func(self, signal):
    print(signal)

Надеясь, что печать ("1") происходит при нажатии клавиши "1" и печать ("2") происходит при нажатии второй клавиши. Когда я попытался запустить это и нажать клавиши 1 и 2, я получаю эту ошибку:

TypeError: test_func() missing 1 required positional argument: 'signal'

Как мне это сделать?

1 Ответ

1 голос
/ 16 марта 2019

Активированный сигнал не отправляет никакой информации, поэтому единственный вариант - получить объект, который испускает сигнал (т. Е. QShortcut), чтобы получить QKeySequence, а из последнего строку:

from PySide2 import QtCore, QtGui, QtWidgets

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        QtWidgets.QShortcut(QtGui.QKeySequence("1"), self, activated=self.test_func)
        QtWidgets.QShortcut(QtGui.QKeySequence("2"), self, activated=self.test_func)

    @QtCore.Slot()
    def test_func(self):
        shorcut = self.sender()
        sequence = shorcut.key()
        print(sequence.toString())

if __name__ == '__main__':
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
...