PySide2 | 找出哪些QKeySequence被压(PySide2 | Finding o

2019-09-29 02:03发布

我使用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'

我怎样才能做到这一点?

Answer 1:

所以一个选择是,以获得发射的信号(即,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_())


文章来源: PySide2 | Finding out which QKeySequence was pressed