gpt4 book ai didi

python - 使用PyQt4,虽然我断开了一个插槽,但它不断触发

转载 作者:行者123 更新时间:2023-11-30 23:45:35 24 4
gpt4 key购买 nike

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

class object(...):
def init(self):
...
self.emit(SIGNAL('result(bool)', result)
...

class classA(...):
def functionA(self):
self.results=[]
self.i=0
self.object[...]=... # len(self.object)=n
self.functionB()

def functionB(self):
self.connect(self.object[self.i], SIGNAL('result(bool)'), lambda bool: self.functionC(bool))
self.object[self.i].init()

def functionC(self, result):
print self.disconnect(self.object[self.i], SIGNAL('result(bool)', lambda bool: self.functionC(bool)) # outputs False (why cannot I disconnect it?)
self.i+=1
self.results.append(result)
if self.i==len(self.object):
print "finish"
self.i=0
return
self.functionB()

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

最佳答案

我不确定您的代码是否只是一个示例,或者您是否确实在插槽中使用 lambda 函数。如果您确实使用 lambda,原因很可能是因为连接和断开连接之间的 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

如果 pyqt 正在存储函数引用并查找您指定要断开连接的函数引用,它将报告其未连接。您想要做的实际上是引用持久回调。要么将 lambda 存储为成员属性并两次引用相同的属性,要么将其定义为标准方法或函数。

关于python - 使用PyQt4,虽然我断开了一个插槽,但它不断触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9436624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com