我正在使用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'
我该如何完成?
激活的信号没有发送任何信息,因此一个选项是获取发出信号的对象(即qshortCut)以获取Qkey序列,并从后者中从字符串中获取:
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_())