【问题标题】:Finding out which QKeySequence was pressed找出按下了哪个 QKeySequence
【发布时间】:2019-08-07 04:23:49
【问题描述】:

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

我怎样才能做到这一点?

【问题讨论】:

    标签: python pyside2 qkeysequence qshortcut


    【解决方案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_())
    

    【讨论】:

    • 谢谢你,它有效。我非常感谢!我确实有一个后续问题,因为它在我正在开发的整个代码的上下文中并没有完全工作。如果可以,请查看here:
    猜你喜欢
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2010-11-06
    • 2020-11-18
    • 2011-11-22
    相关资源
    最近更新 更多