मेरे पास तारों की एक सूची है और उन प्रत्येक स्ट्रिंग के लिए मेनू प्रविष्टि बनाना चाहते हैं। जब उपयोगकर्ता किसी एक प्रविष्टि पर क्लिक करता है, तो हमेशा एक ही फ़ंक्शन को स्ट्रिंग के साथ तर्क के रूप में बुलाया जाएगा। कुछ की कोशिश कर रहा है और अनुसंधान के बाद मैं कुछ इस तरह के साथ आया था: "आइटम 3" के बजाय इसी एक:तारों की सूची से पीईक्यूटी मेनू बनाएं
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_())
अब समस्या यह है कि मेनू आइटम में से प्रत्येक के एक ही आउटपुट प्रिंट होगा है। मैं इस बारे में किसी भी विचार के लिए आभारी हूं कि मैं यह अधिकार कैसे प्राप्त कर सकता हूं। धन्यवाद।
@Alex: +1 !!! यह सब सुबह मुझे परेशान कर रहा है! लैम्ब्डा एक्स = एक्स: func (x) एफटीडब्ल्यू :) –
उत्कृष्ट जवाब! यह नए कनेक्शन सिंटैक्स के साथ भी काम करता है: 'entry.triggered.connect (lambda item = item: self.doStuff (item))' – Leistungsabfall