Chciałbym dodać zastrzeżenie/rozszerzenie do odpowiedzi @ Rainera odnoszące się do metod związanych. Należy pamiętać, że powiązanie metody z instancją (np. Poprzez napisanie self.slotname
) faktycznie tworzy nowe zamknięcie za każdym razem (jak w pytaniu this).
Można by zatem mają ten sam problem robi
def test_slot(self):
self.makeThread(self.googleSearch())
...
self.query.textChanged.connect(self.test_slot)
...
self.query.textChanged.disconnect(self.test_slot)
jak to było z oryginalnym lambda
w swoim pytaniu. Rozwiązaniem jest przechowywanie zamknięciaself.test_slot
w atrybucie, jak sugeruje @rainer. Jest to konieczne, ponieważ nowy obiekt, który jest mniej więcej równoważny z lambda: type(self).test_slot(self)
, jest generowany za każdym razem, gdy piszesz kod self.test_slot
. Następujące elementy będą działały prawidłowo, o ile dokładnie prowadzisz księgowanie:
self.func = self.test_slot
self.query.textChanged.connect(self.func)
...
self.query.textChanged.disconnect(self.func)