Python 使用PyQt4,虽然我断开了插槽的连接,但它会一直触发

Python 使用PyQt4,虽然我断开了插槽的连接,但它会一直触发,python,pyqt4,signals-slots,Python,Pyqt4,Signals Slots,我想在对象列表中执行一个函数,并存储结果。 下面代码中我的问题是,尽管我尝试断开所有信号,functionC仍以某种方式持续触发。(断开输出错误) 有人能想象出这个问题吗?谢谢我不确定您的代码是否只是一个示例,或者您是否真的在插槽中使用lambda函数。如果您确实在使用lambda,原因很可能是因为lambda函数在connect和disconnect之间是完全不同的对象: >>> fn1 = lambda bool: self.functionC(bool) >>

我想在对象列表中执行一个函数,并存储结果。 下面代码中我的问题是,尽管我尝试断开所有信号,functionC仍以某种方式持续触发。(断开输出错误)


有人能想象出这个问题吗?谢谢

我不确定您的代码是否只是一个示例,或者您是否真的在插槽中使用lambda函数。如果您确实在使用lambda,原因很可能是因为lambda函数在connect和disconnect之间是完全不同的对象:

>>> fn1 = lambda bool: self.functionC(bool)
>>> fn2 = lambda bool: self.functionC(bool)
>>> print fn1, fn2
<function <lambda> at 0x1004a9320> <function <lambda> at 0x1004a9398>
>>> fn1 == fn2
False
>>> fn1 is fn2
False
fn1=lambda bool:self.functionC(bool) >>>fn2=lambda bool:self.functionC(bool) >>>打印fn1,fn2 >>>fn1==fn2 假的 >>>fn1就是fn2 假的 如果pyqt正在存储函数引用并查找您指定要断开的函数引用,它将报告其未连接。实际上,您要做的是引用持久回调。要么将lambda存储为成员属性并两次引用相同的属性,要么将其定义为标准方法或函数

>>> fn1 = lambda bool: self.functionC(bool)
>>> fn2 = lambda bool: self.functionC(bool)
>>> print fn1, fn2
<function <lambda> at 0x1004a9320> <function <lambda> at 0x1004a9398>
>>> fn1 == fn2
False
>>> fn1 is fn2
False