Я пытаюсь подклассифицировать общий класс данных для выполнения некоторых дополнительных операций над данными, вычисленными родителем. Я хотел бы повторно использовать сигнал dataReady
в подклассе. Проблема в том, что сигнал все еще испускается из родительского элемента и запускает подключенный слот (ы) до завершения дополнительных вычислений.Переопределение сигналов PyQt в дочернем классе
Возможно ли переопределить/подавить сигналы, излучаемые родительским классом, или мне просто нужно выбрать другое имя сигнала?
Вот упрощенный пример моих классов:
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()
Спасибо, это отвечает на мой вопрос. Однако, похоже, этот метод не будет распространяться на дальнейшие уровни наследования – user3419537
@ user3419537. Да. Он будет блокировать * все * сигналы, независимо от наследования. Однако 'super' не предназначен для вызова * определенных * классов в иерархии наследования. Для этого вам следует обойти порядок вычисления расчетного метода и напрямую ссылаться на класс (например, «BaseClass.initData (self)»). – ekhumoro
Я понимаю, что проблема заключается в том, что вызов также разблокирует все сигналы независимо от наследования, поэтому, если у меня есть ребенок, который использует этот метод, а родительский конструктор вызывает «blockSignals (False)» и испускает сигнал, то это отрицает эффект вызова 'blockSignals (True)' в конструкторе дочернего элемента. – user3419537