vorrei aggiungere un avvertimento/estensione alla risposta @ di Rainer relative ai metodi rilegati. Tieni presente che il collegamento di un metodo a un'istanza (ad esempio, scrivendo self.slotname
) crea effettivamente una nuova chiusura ogni volta (come nella domanda this).
Si avrebbe quindi lo stesso problema facendo
def test_slot(self):
self.makeThread(self.googleSearch())
...
self.query.textChanged.connect(self.test_slot)
...
self.query.textChanged.disconnect(self.test_slot)
come avete fatto con l'originale lambda
nella sua interrogazione. La soluzione è di memorizzare la chiusura self.test_slot
in un attributo, come suggerisce @rainer. Ciò è necessario perché un nuovo oggetto che equivale approssimativamente a lambda: type(self).test_slot(self)
viene generato ogni volta che si scrive self.test_slot
nel codice. Quanto segue funzionerà bene fino a quando effettui la contabilità in modo accurato:
self.func = self.test_slot
self.query.textChanged.connect(self.func)
...
self.query.textChanged.disconnect(self.func)
fonte
2017-04-25 06:33:32