首页 > 解决方案 > 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但没有做任何事情,我希望打印实例的文本可以解决问题,但似乎这也不起作用。

编辑:只想提一下我使用的数组更大并且经常更改,所以我不能只对菜单中的每个条目进行硬编码。

标签: pythonqt

解决方案


推荐阅读