2017-10-15 62 views
0

我有一个名称列表,并从该列表中,我想填充我的QMainWindowmenubar。下面的代码尝试:使用for循环将项添加到菜单栏 - Pyqt5

list_name = ['Miller', 'Johnson', 'Robert'] 
self.menuName = self.menuBar().addMenu('Name') 
for i in range(0,3): 
    list_name[i]+'_action' = QtWidgets.QAction(list_name[i], self) 
    self.menuName.addAction(list_name[i]) 

在这里的错误:

enter image description here

谢谢

回答

1

不能将变量分配给一个字符串,你必须反其道而行之,除了它没有必要让变量具有不同的名称。

为了使其更具可读性,您还可以遍历列表,而不是迭代数字。

list_name = ['Miller', 'Johnson', 'Robert'] 
self.menuName = self.menuBar().addMenu('Name') 
for name in list_name: 
    action = QtWidgets.QAction(name, self) 
    self.menuName.addAction(action) 
+0

太棒了!只是一个简单的问题。如何将菜单栏中的项目连接到相同的def?应该包含这种类型的代码到循环中:'self.name_action.triggered.connect(self.def_name)'?谢谢 –

+1

如果你想把所有的QAction连接到同一个函数,你只需要使用:'action.triggered.connect(self.def_name)'。如果你想在函数中过滤,你只需要使用'self.sender()'。请不要忘记标记我的答案是正确的。 – eyllanesc

+0

还有一件事...我怎样才能将所选项目的名称作为变量进行传递?我做了这个'action.triggered.connect(lambda item = name:self.def_name(item))',但是当我打印变量时返回'False'。谢谢 –

相关问题