首页 文章

PySide / Qt:将信号连接到插槽的参数太多了?

提问于
浏览
6

我正在尝试将自定义信号(在 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,连接到类本身的方法),并且我没有问题将'default'信号与默认插槽连接(如 self.button.clicked.connect(self.edit.clear) 或类似的东西)

2 回答

  • 7

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

    在我的情况下,我的一个发出信号的类也有一个“连接”功能,并重命名它修复了问题 . 它应该不会引起问题,因为你从Signal()类型本身调用connect,但似乎有问题 .

  • 0

    我在尝试运行程序时遇到同样的错误 . 看起来很奇怪 . 我发现只有一个提及here但没有解决方案 . 我可以建议你的一件事是老式 connect 仍然可以正常工作:

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

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

相关问题