Sono bloccato con il seguente problema. Sto provando a collegare una funzione lambda a un segnale per passare alcuni dati extra alla fine.PyQT Collegamento della funzione lambda al segnale
def createTimeComboBox(self,slotCopy):
timeComboBox = QComboBox()
#...
cmd = lambda func=self.test:func()
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),cmd)
#...
def test(self, value):
print value
Quando eseguo createTimeComboBox(),
ottengo questo errore:
TypeError: 'int' object is not callable
Modifica
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),cmd)
a
self.connect(timeComboBox, SIGNAL("currentIndexChanged(int)"),self.test)
funziona bene, ma vorrei essere in grado di passare il slotCopy
variabile, quindi presume che ho bisogno di utilizzare l'approccio lambda
.
L'ho fatto precedentemente con un segnale QPushButton
clicked()
e ha funzionato correttamente.
def createToDoctorButton(self,extraData):
toDoctorButton = QPushButton()
cmd = lambda func=self.goToDoctor:func(extraData)
self.connect(toDoctorButton, SIGNAL('clicked()'),cmd)
return toDoctorButton
def goToDoctor(self,extraData):
print extraData
Spero che abbia senso: qualcuno ha qualche idea? Grazie per eventuali suggerimenti! Acclamazioni Dave
Fantastico grazie, ha funzionato a meraviglia! Grazie per averlo spiegato! –
Oltre a me, come facevi a sapere che il parametro è stato sovrascritto? – user1767754
@ user1767754 a proposito dei segnali funzionano in Qt. Gli slot possono avere argomenti uguali o minori e quelli extra verranno ignorati. Ma i restanti saranno passati. Non importa se hai un default per quell'argomento o no. Se un segnale passa un argomento, lo slot lo riceverà se possibile. – Avaris