From b460ea9955318879ddfe4f9ae963249ba342bbb5 Mon Sep 17 00:00:00 2001 From: appel_c Date: Tue, 15 Apr 2025 14:30:17 +0200 Subject: [PATCH] fix(progress-ring-bar): fix parent inheritance and cleanup of ring objects; closes #496 --- .../progress/ring_progress_bar/ring.py | 4 ++-- .../ring_progress_bar/ring_progress_bar.py | 20 ++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/bec_widgets/widgets/progress/ring_progress_bar/ring.py b/bec_widgets/widgets/progress/ring_progress_bar/ring.py index 6ee69912..5b6d9cf7 100644 --- a/bec_widgets/widgets/progress/ring_progress_bar/ring.py +++ b/bec_widgets/widgets/progress/ring_progress_bar/ring.py @@ -96,7 +96,6 @@ class Ring(BECConnector, QObject): def __init__( self, parent=None, - parent_progress_widget=None, config: RingConfig | dict | None = None, client=None, gui_id: Optional[str] = None, @@ -111,7 +110,8 @@ class Ring(BECConnector, QObject): self.config = config super().__init__(parent=parent, client=client, config=config, gui_id=gui_id, **kwargs) - self.parent_progress_widget = parent_progress_widget + self.parent_progress_widget = parent + self.color = None self.background_color = None self.start_position = None diff --git a/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py b/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py index ad66d658..7a0ad429 100644 --- a/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py +++ b/bec_widgets/widgets/progress/ring_progress_bar/ring_progress_bar.py @@ -123,7 +123,7 @@ class RingProgressBar(BECWidget, QWidget): # For updating bar behaviour self._auto_updates = True - self._rings = None + self._rings = [] if num_bars is not None: self.config.num_bars = max( @@ -134,11 +134,12 @@ class RingProgressBar(BECWidget, QWidget): self.enable_auto_updates(self.config.auto_updates) @property - def rings(self): + def rings(self) -> list[Ring]: + """Returns a list of all rings in the progress bar.""" return self._rings @rings.setter - def rings(self, value): + def rings(self, value: list[Ring]): self._rings = value def update_config(self, config: RingProgressBarConfig | dict): @@ -169,9 +170,7 @@ class RingProgressBar(BECWidget, QWidget): ) for i in range(self.config.num_bars) ] - self._rings = [ - Ring(parent_progress_widget=self, config=config) for config in self.config.rings - ] + self._rings = [Ring(parent=self, config=config) for config in self.config.rings] if self.config.color_map: self.set_colors_from_map(self.config.color_map) @@ -199,7 +198,7 @@ class RingProgressBar(BECWidget, QWidget): directions=-1, **kwargs, ) - ring = Ring(parent_progress_widget=self, config=ring_config) + ring = Ring(parent=self, config=ring_config) self.config.num_bars += 1 self._rings.append(ring) self.config.rings.append(ring.config) @@ -225,7 +224,10 @@ class RingProgressBar(BECWidget, QWidget): self._reindex_rings() if self.config.color_map: self.set_colors_from_map(self.config.color_map) - del ring + # Remove ring from rpc, afterwards call close event. + ring.rpc_register.remove_rpc(ring) + ring.deleteLater() + # del ring self.update() def _reindex_rings(self): @@ -292,7 +294,7 @@ class RingProgressBar(BECWidget, QWidget): widget_class="Ring", index=i, start_positions=90 * 16, directions=-1 ) self.config.rings.append(new_ring_config) - new_ring = Ring(parent_progress_widget=self, config=new_ring_config) + new_ring = Ring(parent=self, config=new_ring_config) self._rings.append(new_ring) elif num_bars < current_num_bars: