From 7e3de2c64e58f3c40cbbfb800fbff9d9484ae60b Mon Sep 17 00:00:00 2001 From: David Perl Date: Mon, 8 Sep 2025 10:43:07 +0200 Subject: [PATCH] fix: slightly improve theming --- bec_widgets/utils/expandable_frame.py | 4 ++-- bec_widgets/utils/forms_from_types/items.py | 8 +++++--- .../available_device_group.py | 5 ++--- .../available_device_group_ui.py | 12 +++++++++--- .../available_device_resources_ui.py | 2 +- 5 files changed, 19 insertions(+), 12 deletions(-) diff --git a/bec_widgets/utils/expandable_frame.py b/bec_widgets/utils/expandable_frame.py index 138dac27..08a4d95f 100644 --- a/bec_widgets/utils/expandable_frame.py +++ b/bec_widgets/utils/expandable_frame.py @@ -33,10 +33,10 @@ class ExpandableGroupFrame(QFrame): self._expanded = expanded self._title_text = f"{title}" - self.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Plain) + self.setFrameStyle(QFrame.Shape.StyledPanel | QFrame.Shadow.Raised) self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) self._layout = QVBoxLayout() - self._layout.setContentsMargins(0, 0, 0, 0) + self._layout.setContentsMargins(5, 0, 0, 0) self.setLayout(self._layout) self._create_title_layout(title, icon) diff --git a/bec_widgets/utils/forms_from_types/items.py b/bec_widgets/utils/forms_from_types/items.py index ad06596d..b480d3a1 100644 --- a/bec_widgets/utils/forms_from_types/items.py +++ b/bec_widgets/utils/forms_from_types/items.py @@ -171,9 +171,10 @@ class DynamicFormItem(QWidget): self._desc = self._spec.info.description self.setLayout(self._layout) self._add_main_widget() + # Sadly, QWidget and ABC are not compatible assert isinstance(self._main_widget, QWidget), "Please set a widget in _add_main_widget()" # type: ignore - self._main_widget.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) - self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) + self._main_widget.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) + self.setSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) if not spec.pretty_display: if clearable_required(spec.info): self._add_clear_button() @@ -188,6 +189,7 @@ class DynamicFormItem(QWidget): @abstractmethod def _add_main_widget(self) -> None: + self._main_widget: QWidget """Add the main data entry widget to self._main_widget and appply any constraints from the field info""" @@ -395,7 +397,7 @@ class ListFormItem(DynamicFormItem): def sizeHint(self): default = super().sizeHint() - return QSize(default.width(), QFontMetrics(self.font()).height() * 6) + return QSize(default.width(), QFontMetrics(self.font()).height() * 4) def _add_main_widget(self) -> None: self._main_widget = QListWidget() diff --git a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group.py b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group.py index 9b93304b..96759d7b 100644 --- a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group.py +++ b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group.py @@ -39,11 +39,10 @@ class _DeviceEntryWidget(QFrame): self._device_spec = device_spec self.included: bool = False - self.setFrameShape(QFrame.Shape.StyledPanel) - self.setFrameShadow(QFrame.Shadow.Raised) + self.setFrameStyle(0) self._layout = QVBoxLayout() - self._layout.setContentsMargins(0, 0, 0, 0) + self._layout.setContentsMargins(2, 2, 2, 2) self.setLayout(self._layout) self.setup_title_layout(device_spec) diff --git a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group_ui.py b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group_ui.py index f4bbf784..bea0a1c3 100644 --- a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group_ui.py +++ b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_group_ui.py @@ -1,5 +1,7 @@ +from typing import TYPE_CHECKING + from qtpy.QtCore import QMetaObject, Qt -from qtpy.QtWidgets import QLabel, QListWidget, QVBoxLayout +from qtpy.QtWidgets import QFrame, QLabel, QListWidget, QVBoxLayout from bec_widgets.widgets.control.device_manager.components._util import mimedata_from_configs from bec_widgets.widgets.control.device_manager.components.constants import ( @@ -7,6 +9,9 @@ from bec_widgets.widgets.control.device_manager.components.constants import ( MIME_DEVICE_CONFIG, ) +if TYPE_CHECKING: + from .available_device_group import AvailableDeviceGroup + class _DeviceListWiget(QListWidget): @@ -24,10 +29,11 @@ class _DeviceListWiget(QListWidget): class Ui_AvailableDeviceGroup(object): - def setupUi(self, AvailableDeviceGroup): + def setupUi(self, AvailableDeviceGroup: "AvailableDeviceGroup"): if not AvailableDeviceGroup.objectName(): AvailableDeviceGroup.setObjectName("AvailableDeviceGroup") AvailableDeviceGroup.setMinimumWidth(150) + self.verticalLayout = QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") AvailableDeviceGroup.set_layout(self.verticalLayout) @@ -46,5 +52,5 @@ class Ui_AvailableDeviceGroup(object): self.device_list.setAcceptDrops(False) self.device_list.setDefaultDropAction(Qt.DropAction.CopyAction) self.verticalLayout.addWidget(self.device_list) - + AvailableDeviceGroup.setFrameStyle(QFrame.Shadow.Plain | QFrame.Shape.Box) QMetaObject.connectSlotsByName(AvailableDeviceGroup) diff --git a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources_ui.py b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources_ui.py index 7f485ba7..d136cbc0 100644 --- a/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources_ui.py +++ b/bec_widgets/widgets/control/device_manager/components/available_device_resources/available_device_resources_ui.py @@ -86,7 +86,7 @@ class Ui_availableDeviceResources(object): self.device_groups_list.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel) self.device_groups_list.setHorizontalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel) self.device_groups_list.setMovement(QListView.Movement.Static) - self.device_groups_list.setSpacing(2) + self.device_groups_list.setSpacing(4) self.device_groups_list.setDragDropMode(QListWidget.DragDropMode.DragOnly) self.device_groups_list.setSelectionBehavior(QListWidget.SelectionBehavior.SelectItems) self.device_groups_list.setSelectionMode(QListWidget.SelectionMode.ExtendedSelection)