0
0
mirror of https://github.com/bec-project/bec_widgets.git synced 2025-07-13 11:11:49 +02:00

fix(designer): avoid touching deleted widgets during init as QtDesigner will segfault

This commit is contained in:
2025-04-12 14:44:45 +02:00
parent e4e9febc98
commit 4381fcc4c2
2 changed files with 6 additions and 3 deletions

View File

@ -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:

View File

@ -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):