我在使用PyQt4中的方法连接信号时遇到困难。
我可以用对象B的方法连接对象A的绑定信号,
但我不能用对象的方法连接对象A的绑定信号
(进行连接的对象。)
我究竟做错了什么?见下文:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
class FooA(QObject):
trigger=pyqtSignal(str)
def receive_trigger(self,a):
print'triggered in FooA, string',a
class MainObj(QObject):
def __init__(self):
self.a1=FooA()
self.a2=FooA()
#I can connect signals and methods of separate objects:
self.a1.trigger.connect(self.a2.receive_trigger)
self.a1.trigger.emit('hi')
#... but I can't connect a signal with a method of self
self.a1.trigger.connect(self.receive_trigger)
self.a1.trigger.emit('hi')
def receive_trigger(self,a):
print 'triggered in MainObj'
执行为: MainObj()
在FooA中触发,字符串为hi 在FooA中触发,字符串hi
我希望看到额外的一行,>在MainObj中触发
提前致谢。 比尔
答案 0 :(得分:2)
正如您已经知道的那样,信号必须属于QObject
,但是这个问题正在发生,因为您没有调用QObject
的构造函数。 FooA
不会覆盖构造函数,因此调用默认构造函数并且信号按预期工作。但是,在MainObj
中,您不会调用超类'(QObject
)构造函数,因此信号将不起作用。要修复,要么:
QObject.__init__(self)
或
super(QObject, self).__init__()
(基于您的约定)位于MainObj
的构造函数顶部,然后信号将按预期工作。