ich mag eine Einschränkung/Erweiterung @ rainer Antwort auf in den gebundenen Methoden betreffen. Denken Sie daran, dass das Binden einer Methode an eine Instanz (z. B. durch Schreiben von self.slotname
) tatsächlich jedes Mal eine neue Schließung verursacht (wie in der Frage this).
Sie würden daher das gleiche Problem
def test_slot(self):
self.makeThread(self.googleSearch())
...
self.query.textChanged.connect(self.test_slot)
...
self.query.textChanged.disconnect(self.test_slot)
tun haben, wie Sie mit dem Original lambda
in Ihrer Frage tat. Die Lösung besteht darin, die Schließungself.test_slot
in einem Attribut zu speichern, wie @rainer vorschlägt. Dies ist erforderlich, da jedes Mal, wenn Sie in Ihrem Code self.test_slot
schreiben, ein neues Objekt generiert wird, das ungefähr lambda: type(self).test_slot(self)
entspricht. Das Folgende funktioniert gut, solange Sie die Buchhaltung genau führen:
self.func = self.test_slot
self.query.textChanged.connect(self.func)
...
self.query.textChanged.disconnect(self.func)