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)"))