在PyQt4中用self方法连接信号

时间:2012-08-06 12:40:19

标签: pyqt

我在使用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中触发

提前致谢。 比尔

1 个答案:

答案 0 :(得分:2)

正如您已经知道的那样,信号必须属于QObject,但是这个问题正在发生,因为您没有调用QObject的构造函数。 FooA不会覆盖构造函数,因此调用默认构造函数并且信号按预期工作。但是,在MainObj中,您不会调用超类'(QObject)构造函数,因此信号将不起作用。要修复,要么:

QObject.__init__(self)

super(QObject, self).__init__()

(基于您的约定)位于MainObj的构造函数顶部,然后信号将按预期工作。