覆盖子类中的PyQt信号

时间:2015-10-05 15:46:43

标签: python qt pyqt qt-signals

我试图将通用数据类子类化,以对父级计算的数据执行一些额外的操作。我想在子类中重用dataReady信号。问题是信号仍然从父节点发出,并在其他计算完成之前触发连接的插槽。

是否可以覆盖/抑制从父类发出的信号,或者我只需要选择不同的信号名称?

这是我班级的简化示例:

class Generic(QtCore.QObject):
    dataReady = pyqtSignal()

    def __init__(self, parent=None):
        super(Generic, self).__init__(parent)

    def initData(self):
        # Perform computations
        ...

        self.dataReady.emit()

class MoreSpecific(Generic):
    dataReady = pyqtSignal()

    def __init__(self, parent=None):
        super(MoreSpecific, self).__init__(parent)  

    def initData(self):
        super(MoreSpecific, self).initData()

        # Further computations
        ...

        self.dataReady.emit()

2 个答案:

答案 0 :(得分:2)

您可以使用blockSignals

def initData(self):
    self.blockSignals(True)
    super(MoreSpecific, self).initData()
    self.blockSignals(False)

答案 1 :(得分:1)

我只是稍微重组一下这些类。

class Generic(QtCore.QObject):
    dataReady = pyqtSignal()

    def __init__(self, parent=None):
        super(Generic, self).__init__(parent)

    def initData(self):
        self.computations()
        self.dataReady.emit()

    def computations(self):
        # put your computations in a method
        ...

class MoreSpecific(Generic):

    def __init__(self, parent=None):
        super(MoreSpecific, self).__init__(parent)  

    def computations(self):
        super(MoreSpecific, self).computations()
        # further computations

现在你的initData方法应该进行一些计算,然后发送信号,不需要改变,你的MoreSpecific类只会发送一次信号。