Ich versuche, einige neue QPushButton
aus der Liste der Zeilen und dann verbinden sie mit einer Event Handler Function
mit connect
, aber egal was ich tue, kann ich sie nicht separat an die Funktion anschließen. der Code wie dieseWie übergebe ich einen dynamisch generierten QPushButton an eine SIGNAL-Handler-Funktion in Python?
def addItemButtons(self,chosen):
# ----------- DELETE OLD BUTTONS ------------
for i in reversed(range(self.layoutbottom.count())):
self.layoutbottom.itemAt(i).widget().setParent(None)
# ----------- MAKE A NEW BUTTON FOR EACH CHOSEN ENTRY -----------
for d in chosen:
itembtn = QPushButton("ID : "+str(d['id']))
itembtn.clicked.connect(lambda : self.handlerFunction(str(d['id'])))
self.layoutbottom.addWidget(itembtn)
def handlerFunction(self,txt):
print(txt)
, wenn ich auf neue Schaltflächen klicken druckt die handlerFucntion
gerade die letzte Taste id
!
Ich suchte und verwendete verschiedene Methoden zum Verbinden von Schaltflächen mit HandlerFunction, aber alle waren gleich.
Was mache ich falsch? :/
es in 'for' Schleife mit' lambda' häufiges Problem sein kann, zu tun. 'lambda' ist" faul "- es erhält keinen Wert von' d', wenn Sie 'lambda' definieren, aber wenn Sie diese Funktion ausführen - wenn Sie auf die Schaltfläche klicken. Aber wenn Sie auf die Schaltfläche klicken, wird "d" auf das letzte Element aus der Liste gesetzt - so dass jede Schaltfläche dasselbe "d" - letzte "d" verwendet. Übliche Lösung: 'Lambda x = d ['id']: self.handlerFunction (str (x))'. Es kopiert den Wert von 'd ['id']' nach 'x' und jeder' lambda' verwendet eigenes 'x'. – furas