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