Tôi có danh sách các chuỗi và muốn tạo mục nhập trình đơn cho từng chuỗi đó. Khi người dùng nhấp vào một trong các mục, luôn luôn cùng một chức năng sẽ được gọi với chuỗi như một đối số. Sau khi một số cố gắng và nghiên cứu tôi đã đưa ra một cái gì đó như thế này:Tạo menu PyQt từ danh sách các chuỗi
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_())
Bây giờ vấn đề là mỗi người trong số các mục trình đơn sẽ in cùng đầu ra: "Khoản 3" thay vì tương ứng với một. Tôi biết ơn vì bất kỳ ý tưởng nào về cách tôi có thể có được quyền này. Cảm ơn.
@Alex: +1 !!! Nó đã làm tôi thất vọng cả buổi sáng! lambda x = x: func (x) FTW :) –
Câu trả lời hay! Nó cũng làm việc với cú pháp kết nối mới: 'entry.triggered.connect (lambda item = item: self.doStuff (item))' – Leistungsabfall