From 4381fcc4c212cd03ce91f1638dc361c3315f8c45 Mon Sep 17 00:00:00 2001 From: wakonig_k Date: Sat, 12 Apr 2025 14:44:45 +0200 Subject: [PATCH] fix(designer): avoid touching deleted widgets during init as QtDesigner will segfault --- bec_widgets/utils/bec_connector.py | 6 +++--- bec_widgets/utils/widget_io.py | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bec_widgets/utils/bec_connector.py b/bec_widgets/utils/bec_connector.py index 01a669f6..983a9035 100644 --- a/bec_widgets/utils/bec_connector.py +++ b/bec_widgets/utils/bec_connector.py @@ -10,11 +10,10 @@ from typing import TYPE_CHECKING, Optional from bec_lib.logger import bec_logger from bec_lib.utils.import_utils import lazy_import_from from pydantic import BaseModel, Field, field_validator -from qtpy.QtCore import QObject, QRunnable, Qt, QThreadPool, Signal +from qtpy.QtCore import QObject, QRunnable, QThreadPool, QTimer, Signal from qtpy.QtWidgets import QApplication from bec_widgets.cli.rpc.rpc_register import RPCRegister -from bec_widgets.utils.container_utils import WidgetContainerUtils from bec_widgets.utils.error_popups import ErrorPopupUtility from bec_widgets.utils.error_popups import SafeSlot as pyqtSlot from bec_widgets.utils.widget_io import WidgetHierarchy @@ -149,7 +148,7 @@ class BECConnector: if connector_parent is not None: self.parent_id = connector_parent.gui_id - self._enforce_unique_sibling_name() + QTimer.singleShot(0, self._enforce_unique_sibling_name) self.rpc_register = RPCRegister() self.rpc_register.add_rpc(self) @@ -168,6 +167,7 @@ class BECConnector: - If there's a nearest BECConnector parent, only compare with children of that parent. - If parent is None (i.e., top-level object), compare with all other top-level BECConnectors. """ + QApplication.processEvents() parent_bec = WidgetHierarchy._get_becwidget_ancestor(self) if parent_bec: diff --git a/bec_widgets/utils/widget_io.py b/bec_widgets/utils/widget_io.py index c7fdad03..fc97dd87 100644 --- a/bec_widgets/utils/widget_io.py +++ b/bec_widgets/utils/widget_io.py @@ -3,6 +3,7 @@ from __future__ import annotations from abc import ABC, abstractmethod +import shiboken6 as shb from qtpy.QtWidgets import ( QApplication, QCheckBox, @@ -422,6 +423,8 @@ class WidgetHierarchy: """ from bec_widgets.utils import BECConnector + if not shb.isValid(widget): + return None parent = widget.parent() while parent is not None: if isinstance(parent, BECConnector):