假设插槽有一个参数,例如,
self._nam = QtNetwork.QNetworkAccessManager(self)
# ...
response = self._nam.get(request)
self.timer.timeout.connect(lambda: self.on_reply_finished(response))
如何将信号从插槽中断开?以下是错误Failed to disconnect signal timeout().
:
self.timer.timeout.disconnect(lambda: self.on_reply_finished(response))
是因为lambda不是真正的'插槽但Python技巧?在这种情况下,如何将响应参数传递给插槽(不使response
成为成员)?
由于
答案 0 :(得分:1)
不,这是因为两个lambda不是同一个对象。
您需要将相同的引用传递给您在disconnect
方法中使用的connect
方法。如果您使用匿名lambda函数,除了在信号上调用disconnect()
(没有参数)之外,没有办法断开它,但这会断开所有连接的信号。
答案 1 :(得分:0)
只有你传递相同的lambda:
self._on_timeout = lambda: self.on_reply_finished(response)
self.timer.timeout.connect(self._on_timeout)
# ...
self.timer.timeout.disconnect(self._on_timeout)
您可能希望将功能附加到计时器:
self.timer.on_timeout = lambda: self.on_reply_finished(response)
self.timer.timeout.connect(self.timer.on_timeout)
# ...
self.timer.timeout.disconnect(self.timer.on_timeout)
顺便说一下,你can use functools.partial
而不是lambda。