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)

キー「1」が押されたときに print("1") が発生し、2番目のキーが押されたときに print("2") が発生することを願っています。これを実行してキー 1 と 2 を押すと、次のエラーが発生します。

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

どうすればこれを達成できますか?

4

1 に答える 1

2

アクティブ化されたシグナルは情報を送信しないため、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_())
于 2019-03-16T05:09:41.580 に答える