1

我很难将信号与 PyQt4 中的方法连接起来。我可以将对象 A 的绑定信号与对象 B 的方法连接起来,但我无法将对象 A 的绑定信号与 self 的方法(建立连接的对象)连接起来。
我做错了什么?见下文:

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 中触发,在 FooA 中触发字符串 hi,字符串 hi

我希望看到额外的一行,> 在 MainObj 中触发

提前致谢。账单

4

1 回答 1

2

您似乎已经知道,信号必须属于QObjects,但出现此问题是因为您没有调用QObject. FooA不会覆盖构造函数,因此调用默认构造函数并且信号按预期工作。但是MainObj,您不调用超类的 ( QObject) 构造函数,因此信号将不起作用。要修复,请输入:

QObject.__init__(self)

或者

super(QObject, self).__init__()

(根据您的约定)在MainObjs 构造函数的顶部,然后信号将按预期工作。

于 2012-08-06T16:54:10.347 回答