所以我在Python方面比较新,而且我一直在努力学习PyQt。我想根据列表的内容动态创建菜单。我找到了一个我改编的例子,它看起来像这样:
for someText in myList:
entry = QAction(someText,MainWindow)
self.myMenu.addAction(entry)
entry.triggered.connect(lambda menuItem=someText: self.doStuff(menuItem))
entry.setText(someText)
菜单已创建但是当选择菜单项时,doStuff()总是传递值为False。所以我把上面改为:
for someText in myList:
entry = QAction(someText,MainWindow)
self.myMenu.addAction(entry)
entry.triggered.connect(lambda bVal, menuItem=someText: self.doStuff(bVal,menuItem))
entry.setText(someText)
确定现在一切都按照我的意愿行事。我仍然在bVal中得到False,我忽略了。
我已经尝试过查看PyQt文档,但是参考部分链接到了C ++文档,而且对于我来说并不是很明显。
我想了解布尔值是什么以及为什么,在我的情况下,它总是为假。我尝试过改变各种各样的东西,但我还没有设法找到一个真实的场景。
由于
PyQT5.4,Windows上的Python 3.4.2。
答案 0 :(得分:1)
triggered signal的C ++文档不应该太难理解:
void QAction :: triggered(bool checked = false)
...
如果操作是可检查的,则检查操作时检查为true,如果未选中操作则检查为false。
因此,使用布尔参数发出信号,该参数指示操作的“已检查”状态,并且此参数覆盖了menuItem
参数的默认值。