0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-14 03:31:50 +02:00

wip - fix teardown of curve tree

This commit is contained in:
2025-04-08 17:18:52 +02:00
parent d3ee1e1b5b
commit 7ce8be5aae
5 changed files with 44 additions and 3 deletions

View File

@ -114,6 +114,7 @@ class BECWidget(BECConnector):
"""Cleanup the widget."""
with RPCRegister.delayed_broadcast():
# All widgets need to call super().cleanup() in their cleanup method
logger.info(f"Registry cleanup for widget {self.__class__.__name__}")
self.rpc_register.remove_rpc(self)
def closeEvent(self, event):

View File

@ -1,7 +1,11 @@
from bec_lib.logger import bec_logger
from PySide6.QtGui import QCloseEvent
from qtpy.QtWidgets import QDialog, QDialogButtonBox, QHBoxLayout, QPushButton, QVBoxLayout, QWidget
from bec_widgets.utils.error_popups import SafeSlot
logger = bec_logger.logger
class SettingWidget(QWidget):
"""
@ -37,6 +41,15 @@ class SettingWidget(QWidget):
"""
pass
def cleanup(self):
"""
Cleanup the settings widget.
"""
def closeEvent(self, event: QCloseEvent) -> None:
self.cleanup()
return super().closeEvent(event)
class SettingsDialog(QDialog):
"""
@ -114,7 +127,10 @@ class SettingsDialog(QDialog):
"""
self.button_box.close()
self.button_box.deleteLater()
self.widget.close()
self.widget.deleteLater()
def closeEvent(self, event):
logger.info("Closing settings dialog")
self.cleanup()
super().closeEvent(event)

View File

@ -2,6 +2,7 @@ from __future__ import annotations
from typing import TYPE_CHECKING
from PySide6.QtGui import QCloseEvent
from qtpy.QtWidgets import (
QComboBox,
QGroupBox,
@ -51,7 +52,7 @@ class CurveSetting(SettingWidget):
self.spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.device_x_label = QLabel("Device")
self.device_x = DeviceLineEdit()
self.device_x = DeviceLineEdit(parent=self)
self._get_x_mode_from_waveform()
self.switch_x_device_selection()
@ -107,3 +108,10 @@ class CurveSetting(SettingWidget):
"""Refresh the curve tree and the x axis combo box in the case Waveform is modified from rpc."""
self.curve_manager.refresh_from_waveform()
self._get_x_mode_from_waveform()
def cleanup(self):
"""Cleanup the widget."""
self.device_x.close()
self.device_x.deleteLater()
self.curve_manager.close()
self.curve_manager.deleteLater()

View File

@ -3,6 +3,7 @@ from __future__ import annotations
import json
from typing import TYPE_CHECKING
from bec_lib.logger import bec_logger
from bec_qthemes._icon.material_icons import material_icon
from qtpy.QtGui import QColor
from qtpy.QtWidgets import (
@ -36,6 +37,9 @@ if TYPE_CHECKING: # pragma: no cover
from bec_widgets.widgets.plots.waveform.waveform import Waveform
logger = bec_logger.logger
class ColorButton(QPushButton):
"""A QPushButton subclass that displays a color.
@ -155,7 +159,7 @@ class CurveRow(QTreeWidgetItem):
"""Create columns 1 and 2. For device rows, we have device/entry edits; for dap rows, label/model combo."""
if self.source == "device":
# Device row: columns 1..2 are device line edits
self.device_edit = DeviceLineEdit()
self.device_edit = DeviceLineEdit(parent=self.tree)
self.entry_edit = QLineEdit() # TODO in future will be signal line edit
if self.config.signal:
self.device_edit.setText(self.config.signal.name or "")
@ -168,7 +172,7 @@ class CurveRow(QTreeWidgetItem):
# DAP row: column1= "Model" label, column2= DapComboBox
self.label_widget = QLabel("Model")
self.tree.setItemWidget(self, 1, self.label_widget)
self.dap_combo = DapComboBox()
self.dap_combo = DapComboBox(parent=self.tree)
self.dap_combo.populate_fit_model_combobox()
# If config.signal has a dap
if self.config.signal and self.config.signal.dap:
@ -320,6 +324,10 @@ class CurveRow(QTreeWidgetItem):
return self.config.model_dump()
def closeEvent(self, event) -> None:
logger.info(f"CurveRow closeEvent: {self.config.label}")
return super().closeEvent(event)
class CurveTree(BECWidget, QWidget):
"""A tree widget that manages device and DAP curves."""
@ -535,3 +543,7 @@ class CurveTree(BECWidget, QWidget):
for dap in dap_curves:
if dap.config.parent_label == dev.config.label:
CurveRow(self.tree, parent_item=dr, config=dap.config, device_manager=self.dev)
def closeEvent(self, event):
logger.info("CurveTree closeEvent")
return super().closeEvent(event)

View File

@ -288,6 +288,8 @@ class Waveform(PlotBase):
"""
Slot for when the axis settings dialog is closed.
"""
self.curve_settings_dialog.close()
self.curve_settings_dialog.deleteLater()
self.curve_settings_dialog = None
self.toolbar.widgets["curve"].action.setChecked(False)
@ -1580,9 +1582,11 @@ class Waveform(PlotBase):
self.clear_all()
if self.curve_settings_dialog is not None:
self.curve_settings_dialog.close()
self.curve_settings_dialog.deleteLater()
self.curve_settings_dialog = None
if self.dap_summary_dialog is not None:
self.dap_summary_dialog.close()
self.dap_summary_dialog.deleteLater()
self.dap_summary_dialog = None
super().cleanup()