我在一个项目中使用了 PyQt5,并有以下片段(button
是一个 QPushButton)
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")
The on_receive
函数连接到 soccet 客户端,每当收到数据包时就会调用。布局有点复杂,因为我的 UI 有太多按钮,迭代它们比对每个按钮进行硬编码更方便。
每当我单击按钮时,连接函数都会将按钮连接到 upvote 函数,该函数创建一个 json 协议并将其发送到套接字服务器。然而,连接功能被称为twice每次点击。 (由于调试打印命令,我确信这一点)。我的程序中的发送函数中没有其他调用。
我推测这可能是由于 clicked.connect 的工作原理(也许它在单击时触发)and发布)。
我使用 QtDesigner 创建 UI 并加载.uic
in my main.py