7

我正在尝试将自定义信号(在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)或类似的东西)连接起来没有问题

4

2 回答 2

12

我自己的代码刚刚遇到这个问题,并想贡献我(认为)的答案。CarSocket 类中还有一个名为“connect”的函数。尝试重命名该函数,看看会发生什么。

在我的例子中,我的一个发出信号的类也有一个“连接”功能,重命名它可以解决问题。它不应该引起问题,因为您从 Signal() 类型本身调用 connect,但似乎存在问题。

于 2013-06-21T01:31:04.043 回答
0

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

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

可能是 PySide 的错误。在评论中人们说他们对 PySide 1.1.2 没有问题。我也有这个版本和 4.8.4 版的 Qt。

于 2013-05-22T17:12:43.813 回答