From d64758f268cad69e6a17bd52dc9913a6367d3cde Mon Sep 17 00:00:00 2001 From: Mathias Guijarro Date: Tue, 16 Jul 2024 15:56:39 +0200 Subject: [PATCH] fix: BECWidget checks if it is a widget, and implements closeEvent and cleanup --- bec_widgets/utils/bec_connector.py | 1 - bec_widgets/utils/bec_widget.py | 23 +++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/bec_widgets/utils/bec_connector.py b/bec_widgets/utils/bec_connector.py index 573a96fa..050fc407 100644 --- a/bec_widgets/utils/bec_connector.py +++ b/bec_widgets/utils/bec_connector.py @@ -15,7 +15,6 @@ from qtpy.QtWidgets import QApplication from bec_widgets.cli.rpc_register import RPCRegister from bec_widgets.qt_utils.error_popups import ErrorPopupUtility -from bec_widgets.utils.bec_widget import BECWidget from bec_widgets.utils.yaml_dialog import load_yaml, load_yaml_gui, save_yaml, save_yaml_gui BECDispatcher = lazy_import_from("bec_widgets.utils.bec_dispatcher", ("BECDispatcher",)) diff --git a/bec_widgets/utils/bec_widget.py b/bec_widgets/utils/bec_widget.py index 462d94a1..2a598264 100644 --- a/bec_widgets/utils/bec_widget.py +++ b/bec_widgets/utils/bec_widget.py @@ -1,8 +1,23 @@ -class BECWidget: - """Base class for all BEC widgets.""" +from qtpy.QtWidgets import QWidget + +from bec_widgets.utils.bec_connector import BECConnector, ConnectionConfig + + +class BECWidget(BECConnector): + """Mixin class for all BEC widgets, to handle cleanup""" + + def __init__(self, client=None, config: ConnectionConfig = None, gui_id: str = None): + if not isinstance(self, QWidget): + raise RuntimeError(f"{repr(self)} is not a subclass of QWidget") + super().__init__(client, config, gui_id) + + def cleanup(self): + """Cleanup the widget.""" + pass def closeEvent(self, event): - if hasattr(self, "cleanup"): + self.rpc_register.remove_rpc(self) + try: self.cleanup() - if hasattr(super(), "closeEvent"): + finally: super().closeEvent(event)