ich PyQt5 für ein Projekt verwendet und haben folgende Schnipsel (button
ist ein QPushButton)Wenn ein QPushButton geklickt wird, es feuert zweimal
def on_receive(self, query):
print("receiving", query)
datapackages = json.loads(query)
for button, datapackage in zip(self.buttonArray, datapackages):
self.wire_up_button(datapackage, button)
def wire_up_button(self, datapackage, button):
title, songid = datapackage["title"], datapackage["songid"]
button.setText(title + " (" + str(datapackage["votes"]) + ")")
button.clicked.connect(lambda: self.upvote(songid))
def upvote(self, sid):
text = '{"action":"upvote", "value":"' + sid + '"}\n'
print(text)
self.send(text)
def send(self, text):
print("Sending")
Die on_receive
Funktion zu einem soccet Client verbunden ist und wird aufgerufen wheneever Ein Datenpaket wird empfangen. Das Layout ist ein bisschen kompliziert, weil meine UI so viele Knöpfe hat, dass es einfacher ist, über sie zu iterieren, als jeden einzelnen hart zu kodieren.
Immer wenn ich auf die Schaltfläche klicke, verdrahtet die Wire-Up-Funktion die Schaltfläche zur Upvote-Funktion, die ein Json-Protokoll erstellt und an den Socket-Server sendet. Die Wire-Up-Funktion wird jedoch zweimal pro Klick genannt. (Ich bin mir wegen der Debug-Druckbefehle sicher). Es gibt keinen anderen Aufruf in der Sendefunktion in meinem Programm.
Ich spekuliere, dass dies möglicherweise darauf zurückzuführen ist, wie click.connect funktioniert (vielleicht löst es bei Klick und Release).
verwendete ich die QtDesigner die Benutzeroberfläche zu erstellen und lud die .uic
in meinem main.py
bitte, könnten Sie mehr Kontext hinzufügen, wie wo ist die 'connect'-Signallinie? wenn ich 'songid' sehe, scheint es in einer Funktion zu sein – PRMoureu
@PRMoureu Ich habe es getan, es könnte verschleiern, was dort vor sich geht. Ich habe mein bestes versucht, um es so leserlich wie möglich zu machen ... – Narusan
wird upvote() mit der gleichen sid aufgerufen? Bist du sicher, dass du wire_up_button nicht zweimal für denselben Button aufruft? – ingvar