2013-05-14 10 views
6

Sto provando a collegare un segnale personalizzato (in una classe client TCP) a un metodo che aggiorna un registro con i dati inviati dal server e quant'altro.PySide/Qt: troppi argomenti per collegare un segnale a uno slot?

Ecco la dichiarazione della classe TCP client:

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

E il metodo che sto cercando di connettersi a 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) 

Così, scrivo questa linea durante l'inizializzazione la mia domanda:

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

E ottengo un bug davvero strano che it Lo eseguo:

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] 

Chiunque può aiutare?

Deve essere notato che ho già collegato correttamente un segnale personalizzato su un'altra classe (con un int, collegato a un metodo della classe stessa) e che non ho problemi a collegare segnali "predefiniti" con slot predefiniti (come self.button.clicked.connect(self.edit.clear) o qualcosa di simile)

+0

Ho testato il codice e ha funzionato bene per me, sia con PySide che con PyQt4. Sei aggiornato all'ultima versione di PySide? BTW, ho usato [questo] (http://pastebin.com/JUEEDM5f) come un esempio grezzo per testarlo, è fondamentalmente corretto? – BrtH

+0

I tuoi esempi funzionano:/(e come ho già detto sto già lavorando con un altro segnale personalizzato, su un'altra classe, che funziona perfettamente). Ho anche l'ultima versione di PySide: 1.1.2 – halflings

+1

Il codice sorgente completo (meno la linea che collega il segnale) può essere trovato su: https://github.com/halflings/autonomee (la connessione del segnale dovrebbe essere fatta su ' main.py'; la classe 'CarSocket' è in' carsocket.py' – halflings

risposta

7

Ho appena avuto questo problema con il mio codice e volevo contribuire con quello che penso sia la risposta. Hai anche una funzione chiamata "connetti" nella tua classe CarSocket. Prova a rinominare quella funzione e vedere cosa succede.

Nel mio caso una delle mie classi che stava emettendo il segnale aveva anche una funzione di "connessione", e rinominandola ha risolto il problema. Non dovrebbe aver causato un problema poiché si chiama connect dal tipo Signal() stesso, ma sembra che ci siano dei problemi.

+1

È strano che questo aiuti. – 101

+1

Ah, nel mio caso è perché la mia classe ha ereditato 'QObject', che ha anche un metodo di connessione. – 101

0

Ottengo lo stesso errore quando sto cercando di eseguire il programma. Sembra davvero strano Ho trovato solo una menzione su quello here ma nessuna soluzione. Una cosa che posso suggerire è vecchio stile connect ancora funziona correttamente:

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

possibile è di bug PySide. Nei commenti le persone hanno affermato di non avere problemi con PySide 1.1.2. Ho anche questa versione e Qt della versione 4.8.4.

+0

L'ho provata e anche se non fa il bug del programma, non fa nulla (non succede nulla quando emetto un segnale) – halflings