2017-10-15 61 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'。謝謝 –

相關問題