Hello world I have an object with a notifiable property "value". I also have 1000+ instances, each has the previous object's property signal connected to it's slot.
In my testing, I exceed the recursion depth at around object 200. It seems that each "emit" pauses the execution, goes to the receiver to emit, and so on, which creates new stack frames. Any way to "solve" this? Thanks! Ps. I'm not subscribed. Please CC me. Snippet: from PySide2.QtCore import * from PySide2.QtGui import * class TestObject(QObject): valueChanged = Signal('QVariant') def __init__(self, *value, name): super(TestObject, self).__init__() self._value = value self._name = name @Property('QVariant', notify = valueChanged) def value(self): return self._value @value.setter def set_value(self, value): if self._value == value: return self._value = value print(f'Emitting {self._name}') self.valueChanged.emit(value) # Recursion here print(f'Stopping {self._name}') @Slot('QVariant') def update_value(self, value): self.set_value(value) def set_dependency(self, test_object): test_object.valueChanged.connect(self.update_value) # create linked objects (obj1-> obj2-> obj3-> obj4-> ... -> obj1999 test_objects = [] for x in range(2000): test_objects.append( TestObject(x, name=f'test{x}') ) if x != 0: test_objects[-1].set_dependency(test_objects[-2]) # update first object, emitting signal to next object, and next, and next, ... test_objects[0].value = 100
_______________________________________________ PySide mailing list PySide@qt-project.org https://lists.qt-project.org/listinfo/pyside