python - QT:在循环中创建菜单项的行为不同
问题描述
我遇到了这个奇怪的问题,我正在从我拥有的列表中创建文件菜单操作项。它显示正确,但行为错误。
这是我的代码的示例片段:
self.dMenu = self.menuBar().addMenu('&Fruit')
for entry in ['apple', 'banana', 'orange', 'strawberry']:
item = QAction(QIcon(), entry, self)
item.triggered.connect(lambda: print(item.text())) #Prints the menu action's text when clicked
self.dMenu.addAction(item)
在文件菜单中,它显示为:
- 苹果
- 香蕉
- 橙
- 草莓
当我单击该项目时,它应该显示操作项目的文本,但strawberry
无论我按哪个,它都会打印。(即使它显示文本作为apple
示例。)
我还尝试创建一组 QAction 菜单项,看看是否能解决问题。
self.dMenu = self.menuBar().addMenu('&Fruit')
actionItems = {}
for entry in ['apple', 'banana', 'orange', 'strawberry']:
actionItems[entry] = QAction(QIcon(), entry, self)
actionItems[entry].triggered.connect(lambda: print(actionItems[entry].text())) #Prints the menu action's text when clicked
self.dMenu.addAction(actionItems[entry])
虽然结果相同。我不确定是什么导致所有操作项的行为相同,即使每个操作项都是作为自己的实例创建的。我最初将操作设置为仅打印entry
但没有做任何事情,我希望打印实例的文本可以解决问题,但似乎这也不起作用。
编辑:只想提一下我使用的数组更大并且经常更改,所以我不能只对菜单中的每个条目进行硬编码。
解决方案
推荐阅读
- docker - docker chmod 没有这样的文件或目录
- replace - 如何用特定字符串替换列的内容?
- android - Android 新活动结果 API
- android - 如何捕获启用固定的 android 应用程序的流量?
- java - CompletableFuture.allOf().orTimeout() 的意外行为
- python - 是否有任何序列化器字段类型来实现标签字段
- html - 使用 Thymeleaf HTML 在 PDF 的所有页面中的页码和日期时间的页脚
- unity3d - 错误操作碰撞
- html - 尝试以响应方式设置此按钮的样式
- ios - Web Socket Connection - iOS Swift 中的连接被拒绝/失败 - Starscream/RxStarscream