Python 2.7 从QActionGroup获取选定的QAction文本标签
因此,我试图创建一个包含选项列表的PyQt设置选项卡,在该选项卡中,我只能从选项列表中选择一个选项。然后,应将所选选项的标签(例如“A”)复制到self.ID变量,以便将其用作后续函数的变量。以下是我在我的init函数中写的内容:Python 2.7 从QActionGroup获取选定的QAction文本标签,python-2.7,pyqt,pyqt5,Python 2.7,Pyqt,Pyqt5,因此,我试图创建一个包含选项列表的PyQt设置选项卡,在该选项卡中,我只能从选项列表中选择一个选项。然后,应将所选选项的标签(例如“A”)复制到self.ID变量,以便将其用作后续函数的变量。以下是我在我的init函数中写的内容: self.ID = 0 self.prevMenu = QtWidgets.QMenu('ID tag', self) ag = QtWidgets.QActionGroup(self.prevMenu, exclusive=True)
self.ID = 0
self.prevMenu = QtWidgets.QMenu('ID tag', self)
ag = QtWidgets.QActionGroup(self.prevMenu, exclusive=True)
self.myID = ['A','B','C','D','E']
for i in self.myID:
Action = ag.addAction(QtWidgets.QAction(i, self.prevMenu, checkable=True))
self.prevMenu.addAction(Action)
Action.setText(i)
Action.triggered.connect(lambda item=Action.text(): self.set_ID(Action.text()))
self.menubar.addMenu(self.prevMenu)
def set_ID(self, ID):
print "Which: ", ID
self.ID = ID
print self.ID
现在我的问题是,当我运行这个时,无论我选择哪个标签,它只是列表中的最后一个元素('E'),被传输到self.ID。我知道这一定是关于我的变量是如何相互继承的,但我不知道如何继承。有人能帮我吗?您的代码中有两个错误
触发的
信号具有已检查的
参数,这意味着您使用的“item”参数将被触发的已检查状态“覆盖”最后一行更改为:
Action.triggered.connect(lambda checked, item=Action: self.set_ID(item.text())
作为个人注意事项,如果您打算仅出于此目的使用set_ID
方法,您可能更愿意将操作用作参数(并从方法中读取其文本),或者最终完全忽略参数,并使用QObject.sender()
函数检索触发信号的操作。太好了,谢谢直到现在,我才在lambda函数中看到错误。我将查看QObject.sender()方法并对其进行更改。不客气!这是一个常见的错误,我也曾与之斗争过几次,现在我已经吸取了教训:-)