私は文字列のリストを持っていて、それらの文字列ごとにメニュー項目を作成したいと思っています。ユーザーが項目の1つをクリックすると、文字列を引数として常に同じ関数が呼び出されます。いくつかしようと研究した後、私はこのような何かを思い付いた:「項目3」の代わりに、対応する1:文字列のリストからPyQtメニューを作成する
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 !!!それは午前中に私を悩ませている!ラムダx = x:func(x)FTW :) –
優れた答え!また、新しい接続構文でも動作します: 'entry.triggered.connect(lambda item = item:self.doStuff(item))' – Leistungsabfall