覆盖子 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)
我正在尝试子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)