Python PySide/Qt:参数太多,无法将信号连接到插槽?

Python PySide/Qt:参数太多,无法将信号连接到插槽?,python,qt,pyqt,signals,pyside,Python,Qt,Pyqt,Signals,Pyside,我正在尝试将一个自定义信号(在TCP客户机类中)连接到一个方法,该方法使用服务器发送的数据等更新日志 以下是TCP客户端类的声明: class CarSocket(QObject): logSignal = Signal(str, str) ... def __init__(self, ...): super(CarSocket, self).__init__() ... 以及我尝试连接到logSignal的方法: def addToLo

我正在尝试将一个自定义信号(在
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)
当我执行它时,我得到一个非常奇怪的错误:

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]
回溯(最近一次呼叫最后一次):
文件“/home/ahmed/workspace/autonome/main.py”,第286行,在
窗口=主窗口()
文件“/home/ahmed/workspace/autonome/main.py”,第115行,in__init__
self.carSocket.logSignal.connect(self.addToLog)
TypeError:connect()正好接受3个参数(给定4个)
[在0.5s内完成,退出代码为1]
有人能帮忙吗


必须注意的是,我已经成功地将一个自定义信号连接到另一个类上(使用一个int,连接到该类本身的一个方法),并且将“默认”信号连接到默认插槽(如
self.button.clicked.connect(self.edit.clear)
或类似内容)没有问题

我在尝试运行您的程序时遇到相同的错误。看起来很奇怪。关于这一点,我只发现了一处,但没有找到解决办法。我可以向您建议的一件事是,老式的
connect
仍然可以正常工作:

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

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

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


在我的例子中,我的一个发出信号的类也有一个“connect”函数,对它进行重命名修复了这个问题。因为您从Signal()类型本身调用connect,所以它本不应该引起问题,但似乎存在问题。

我测试了您的代码,它在PySide和PyQt4上运行良好。您是否已更新到PySide的最新版本?顺便说一句,我用了一个粗略的例子来测试它,它基本上正确吗?你的例子有效:/(正如我说的,我已经在另一个类上使用另一个自定义信号,它工作得很好)。我还有PySide的最新版本:1.1.2完整的源代码(减去连接信号的行)可以在以下位置找到:(信号连接应该在
main.py
上完成;
CarSocket
类在
CarSocket.py
中,我试过了,即使它没有引起程序错误,也没有任何作用(当我发出信号时,什么都不会发生)这很奇怪,这很有帮助。啊,在我的例子中,这是因为我的类继承了
QObject
,它也有一个connect方法。
self.connect(self.carSocket, SIGNAL("logSignal(str, str)"), self, SLOT("addToLog(str, str)"))