2013-05-14 4 views
6

Ich versuche, ein benutzerdefiniertes Signal (in einer TCP Client-Klasse) mit einer Methode zu verbinden, die ein Protokoll mit den Daten aktualisiert, die vom Server und was nicht gesendet werden.PySide/Qt: Zu viele Argumente, um ein Signal mit einem Slot zu verbinden?

Hier ist die Erklärung der TCP Client-Klasse:

class CarSocket(QObject): 
    logSignal = Signal(str, str) 
    ... 
    def __init__(self, ...): 
     super(CarSocket, self).__init__() 
     ... 

Und die Methode, die ich zu logSignal verbinden bin versucht:

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) 

So schreibe ich diese Zeile, wenn meine Anwendung zu initialisieren:

self.carSocket.logSignal.connect(self.addToLog) 

Und ich bekomme einen wirklich seltsamen Bug wh

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] 

Jeder kann dabei helfen: en ich es ausführen?

Es muss angemerkt werden, dass ich bereits erfolgreich ein benutzerdefiniertes Signal an eine andere Klasse angeschlossen habe (mit einem int, verbunden mit einer Methode der Klasse selbst) und dass ich keine Probleme habe, Standard-Signale mit Standard-Steckplätzen zu verbinden (wie self.button.clicked.connect(self.edit.clear)) oder etwas ähnliches)

+0

Ich habe Ihren Code getestet und es funktionierte gut für mich, sowohl mit PySide und PyQt4. Sind Sie auf die neueste Version von PySide aktualisiert? BTW, ich habe [das] (http://pastebin.com/JUEEDM5f) als ein grobes Beispiel, um es zu testen, ist es im Grunde richtig? – BrtH

+0

Ihre Beispiele funktioniert:/(und wie gesagt ich arbeite bereits mit einem anderen benutzerdefinierten Signal, in einer anderen Klasse, das funktioniert perfekt). Ich habe auch die neueste Version von PySide: 1.1.2 – halflings

+1

Der vollständige Quellcode (minus der Verbindungslinie des Signals) finden Sie unter: https://github.com/halflings/autonomee (die Signalverbindung sollte am 'erfolgen main.py'; und die 'CarSocket' Klasse ist in' carsocket.py' – halflings

Antwort

7

hatte gerade dieses Problem mit meinem eigenen Code, und wollte beitragen, was ich (denke) ist die Antwort. Sie haben auch eine Funktion namens "connect" in Ihrer CarSocket-Klasse. Versuchen Sie, diese Funktion umzubenennen und zu sehen, was passiert.

In meinem Fall hatte eine meiner Klassen, die das Signal ausgab, auch eine "connect" -Funktion, und die Umbenennung behob das Problem. Es sollte kein Problem verursacht haben, da Sie connect vom Signal() -Typ selbst aufrufen, aber es scheint Probleme zu geben.

+1

Es ist seltsam, dass das hilft – 101

+1

Ah, in meinem Fall ist es, weil meine Klasse 'QObject' geerbt hat, die auch eine Verbindungsmethode hat. – 101

0

Ich bekomme den gleichen Fehler, wenn ich versuche, Ihr Programm zu starten. Es sieht wirklich komisch aus. Ich habe nur eine Erwähnung darüber gefunden here aber keine Lösung. Eine Sache kann ich Ihnen vorschlagen, ist im alten Stil connect funktioniert immer noch richtig:

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

Mögliche es Fehler von pyside. In Kommentaren haben die Leute gesagt, dass sie kein Problem mit PySide 1.1.2 haben. Ich habe diese Version auch und Qt der Version 4.8.4.

+0

Ich habe es versucht und selbst wenn es den Programmfehler nicht macht, tut es nichts (nichts passiert, wenn ich ein Signal aussende) – halflings