Tengo una lista de cadenas y quiero crear una entrada de menú para cada una de esas cadenas. Cuando el usuario hace clic en una de las entradas, siempre se llamará a la misma función con la cadena como argumento. Después de algún tratando y la investigación me encontré con algo como esto:Crear menú PyQt a partir de una lista de cadenas
import sys
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.menubar = self.menuBar()
menuitems = ["Item 1","Item 2","Item 3"]
menu = self.menubar.addMenu('&Stuff')
for item in menuitems:
entry = menu.addAction(item)
self.connect(entry,QtCore.SIGNAL('triggered()'), lambda: self.doStuff(item))
menu.addAction(entry)
print "init done"
def doStuff(self, item):
print item
app = QtGui.QApplication(sys.argv)
main = MainWindow()
main.show()
sys.exit(app.exec_())
Ahora el problema es que cada uno de los elementos del menú se imprimirá la misma salida: "Artículo 3" en lugar de la correspondiente. Estoy agradecido por cualquier idea sobre cómo puedo hacer esto bien. Gracias.
@Alex: +1 !!! ¡Me ha estado molestando toda la mañana! lambda x = x: func (x) FTW :) –
¡Excelente respuesta! También funciona con la nueva sintaxis de conexión: 'entry.triggered.connect (lambda item = item: self.doStuff (item))' – Leistungsabfall