文字列のリストがあり、それらの文字列ごとにメニュー エントリを作成したいと考えています。ユーザーがエントリの 1 つをクリックすると、常に同じ関数が文字列を引数として呼び出されます。いくつかの試行錯誤の後、私は次のようなものを思いつきました:
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_())
ここでの問題は、各メニュー項目が同じ出力を出力することです。対応する項目ではなく、「項目 3」です。これを正しく行う方法についてのアイデアに感謝します。ありがとう。