mirror of
https://github.com/bec-project/bec_widgets.git
synced 2025-07-14 03:31:50 +02:00
fix(designer): avoid touching deleted widgets during init as QtDesigner will segfault
This commit is contained in:
@ -10,11 +10,10 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
from bec_lib.logger import bec_logger
|
from bec_lib.logger import bec_logger
|
||||||
from bec_lib.utils.import_utils import lazy_import_from
|
from bec_lib.utils.import_utils import lazy_import_from
|
||||||
from pydantic import BaseModel, Field, field_validator
|
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 qtpy.QtWidgets import QApplication
|
||||||
|
|
||||||
from bec_widgets.cli.rpc.rpc_register import RPCRegister
|
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 ErrorPopupUtility
|
||||||
from bec_widgets.utils.error_popups import SafeSlot as pyqtSlot
|
from bec_widgets.utils.error_popups import SafeSlot as pyqtSlot
|
||||||
from bec_widgets.utils.widget_io import WidgetHierarchy
|
from bec_widgets.utils.widget_io import WidgetHierarchy
|
||||||
@ -149,7 +148,7 @@ class BECConnector:
|
|||||||
if connector_parent is not None:
|
if connector_parent is not None:
|
||||||
self.parent_id = connector_parent.gui_id
|
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 = RPCRegister()
|
||||||
self.rpc_register.add_rpc(self)
|
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 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.
|
- 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)
|
parent_bec = WidgetHierarchy._get_becwidget_ancestor(self)
|
||||||
|
|
||||||
if parent_bec:
|
if parent_bec:
|
||||||
|
@ -3,6 +3,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
|
|
||||||
|
import shiboken6 as shb
|
||||||
from qtpy.QtWidgets import (
|
from qtpy.QtWidgets import (
|
||||||
QApplication,
|
QApplication,
|
||||||
QCheckBox,
|
QCheckBox,
|
||||||
@ -422,6 +423,8 @@ class WidgetHierarchy:
|
|||||||
"""
|
"""
|
||||||
from bec_widgets.utils import BECConnector
|
from bec_widgets.utils import BECConnector
|
||||||
|
|
||||||
|
if not shb.isValid(widget):
|
||||||
|
return None
|
||||||
parent = widget.parent()
|
parent = widget.parent()
|
||||||
while parent is not None:
|
while parent is not None:
|
||||||
if isinstance(parent, BECConnector):
|
if isinstance(parent, BECConnector):
|
||||||
|
Reference in New Issue
Block a user