1

我正在使用 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)

希望 print("1") 在按下键“1”时发生,而 print("2") 在按下第二个键时发生。当我尝试运行它并按下键 1 和 2 时,我收到此错误:

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

我怎样才能做到这一点?

4

1 回答 1

2

激活的信号不发送任何信息,因此一种选择是获取发出信号的对象(即 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_())
于 2019-03-16T05:09:41.580 回答