Ich habe eine Liste von Zeichenfolgen und möchte einen Menüeintrag für jede dieser Zeichenfolgen erstellen. Wenn der Benutzer auf einen der Einträge klickt, soll immer die gleiche Funktion mit der Zeichenkette als Argument aufgerufen werden. Nach einiger versuchen und Forschung kam ich mit so etwas wie dies oben:Erstellen PyQt-Menü aus einer Liste von Zeichenfolgen
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_())
Das Problem ist jetzt, dass jeder der Menüpunkte wird die gleiche Ausgabe drucken: „Punkt 3“ anstelle des entsprechenden. Ich bin dankbar für irgendwelche Ideen, wie ich das richtig machen kann. Vielen Dank.
@Alex: +1 !!! Es nervt mich den ganzen Morgen! Lambda x = x: Funktion (x) FTW :) –
Ausgezeichnete Antwort! Es funktioniert auch mit der neuen Verbindungssyntax: 'entry.trigger.connect (lambda item = item: self.doStuff (item))' – Leistungsabfall