覆盖子 class 中的 PyQt 信号

Overriding PyQt signals in child class

我正在尝试子class 通用数据 class 以对父级计算的数据执行一些额外的操作。我想在 subclass 中重用 dataReady 信号。问题是信号仍然从父级发出,并在附加计算完成之前触发连接的插槽。

是否有可能 override/suppress 从父级 class 发出的信号,或者我只需要选择一个不同的信号名称?

这是我的 classes 的简化示例:

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()

我只是稍微调整一下 classes。

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 class 只会发送信号一次。

您可以使用 blockSignals:

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