所以我正在尝试创建一个包含选项列表的PyQt设置选项卡,其中我只能选择一个选项列表中的一个选项。然后应将所选选项的标签(例如“A”)复制到self.ID变量,以便它可以用作后续函数的变量。以下是我在 init 函数中编写的内容:
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.我知道它必须是关于我的变量如何从彼此继承的东西,但我无法弄清楚如何。有人能帮助我吗?
答案 0 :(得分:1)
您的代码中存在两个错误。
triggered
信号具有checked
个参数,这意味着您使用的“item”参数将被触发的已检查状态“覆盖”。您应该将for
周期的最后一行更改为:
Action.triggered.connect(lambda checked, item=Action: self.set_ID(item.text())
作为个人注释,如果您仅为此目的使用set_ID
方法,您可能更喜欢将操作用作参数(并从方法中读取其文本),或者最终忽略完全参数并使用QObject.sender()
函数来检索触发信号的动作。