2013-05-14 112 views
6

我試圖將自定義信號(在TCP客戶端類中)連接到使用服務器發送的數據更新日誌的方法。PySide/Qt:將信號連接到插槽的參數太多?

這裏的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) 

我得到一個非常奇怪的bug恩我執行:

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)或類似的東西)

+0

我測試了你的代碼,它對PySide和PyQt4都適用。你是否更新到最新版本的PySide? 順便說一句,我用[this](http://pastebin.com/JUEEDM5f)作爲一個粗略的例子來測試它,它基本上是正確的嗎? – BrtH 2013-05-14 10:10:02

+0

您的示例工作原理:/(正如我所說的,我已經在另一個類上使用了另一個自定義信號,它完美地工作)。我也有PySide的最新版本:1.1.2 – halflings 2013-05-14 11:34:18

+1

完整的源代碼(連接信號線)可以在https://github.com/halflings/autonomee找到(信號連接應該在' main.py';而'CarSocket'類是'carsocket.py' – halflings 2013-05-14 11:35:48

回答

7

剛纔有我自己的代碼這個問題,並想貢獻我認爲是答案。您的CarSocket類中還有一個名爲「connect」的函數。嘗試重命名該功能,看看會發生什麼。

在我的情況下,我的一個發出信號的類也有「連接」功能,重命名它可以解決問題。它應該不會引起問題,因爲你調用了Signal()類型的連接,但似乎存在問題。

+1

這很奇怪,有幫助 – 101 2015-11-08 22:22:29

+1

啊,對我而言,這是因爲我的類繼承了'QObject',它也有一個連接方法。 – 101 2015-11-08 23:10:22

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。

+0

我嘗試過了,即使它不會使程序的bug,它不會做任何事情(當我發出的信號沒有反應) – halflings 2013-05-23 00:59:08