python PySide /定量:将信号连接到插槽的参数太多?

fcy6dtqo  于 2023-01-19  发布在  Python
关注(0)|答案(3)|浏览(170)

我尝试将一个自定义信号(在TCP客户端类中)连接到一个方法,该方法使用服务器发送的数据更新日志。
下面是TCP客户端类的声明:

class CarSocket(QObject):
    logSignal = Signal(str, str)
    ...
    def __init__(self, ...):
        super(CarSocket, self).__init__()
        ...

我尝试连接到logSignal的方法:

def addToLog(self, text, mode='NORMAL'):
    if mode == 'RAW':
        toAdd = text
    else:
        toAdd = "<p>{}</p> \n <hr> \n".format(text)
    self.log.logEdit.append(toAdd)

因此,我在初始化应用程序时编写了以下代码行:

self.carSocket.logSignal.connect(self.addToLog)

当我执行它的时候,我得到了一个非常奇怪的错误:

Traceback (most recent call last):
  File "/home/ahmed/workspace/autonomee/main.py", line 286, in <module>
    window = MainWindow()
  File "/home/ahmed/workspace/autonomee/main.py", line 115, in __init__
    self.carSocket.logSignal.connect(self.addToLog)
TypeError: connect() takes exactly 3 arguments (4 given)
[Finished in 0.5s with exit code 1]

有人能帮忙吗?
必须注意的是,我已经成功地在另一个类上连接了一个自定义信号(使用int,连接到类本身的方法),并且我在使用默认插槽连接"默认"信号(如self.button.clicked.connect(self.edit.clear)或类似的东西)时没有遇到任何问题

qnzebej0

qnzebej01#

我自己的代码遇到了这个问题,我想贡献出我认为是答案的东西。你的CarSocket类中还有一个名为“connect”的函数。试着重命名这个函数,看看会发生什么。
在我的例子中,一个发出信号的类也有一个“connect”函数,重命名它就解决了这个问题,因为你是从Signal()类型本身调用connect的,所以它不应该引起问题,但是看起来有问题。

eqqqjvef

eqqqjvef2#

当我尝试运行你的程序时,我得到了同样的错误。它看起来真的很奇怪。我发现这里只提到了一个,但没有解决方案。我可以建议你的一件事是老式的connect仍然可以正常工作:

self.connect(self.carSocket, SIGNAL("logSignal(str, str)"), self, SLOT("addToLog(str, str)"))

可能是PySide的bug。在评论中人们说他们在PySide1.1.2版没有问题。我也有这个版本和4.8.4版的Qt。

ftf50wuq

ftf50wuq3#

您必须在QObject中 Package 信号:

class CarSocketSignal(QObject):
    logSignal = Signal(str, str)

class CarSocket(QObject):
    cslogSignal = CarSocketSignal()
...
def __init__(self, ...):
    super(CarSocket, self).__init__()
    ...

此调用将为:

self.carSocket.cslogSignal.logSignal.connect(self.addToLog)

应该可以...

相关问题