Polish GUI design

This commit is contained in:
Ayzen
2026-10-06 14:16:14 +03:00
parent 5bb86b7165
commit 4947d5a14e
25 changed files with 222 additions and 235 deletions
+14 -20
View File
@@ -26,6 +26,7 @@ from PyQt6.QtWidgets import (
import numpy as np
import pyqtgraph as pg
from python_app.gui.controllers.renderers.common import create_plot
from python_app.models.gui_profile_schema import GuiPreprocessDialogStateModel
from python_app.models.dataset_model import TraceData
from python_app.orchestration.preprocess_assets import (
@@ -113,7 +114,7 @@ class PreprocessDialog(QDialog):
layout.addLayout(self._build_median_sweep_row(group))
layout.addWidget(self._build_radar_config_group(group))
layout.addWidget(self._build_selector_group("S21", tuple(PREPROCESS_ASSET_NAMES), group))
layout.addLayout(self._build_selectors(group))
return group
def _build_median_sweep_row(self, parent: QGroupBox) -> QHBoxLayout:
@@ -141,7 +142,7 @@ class PreprocessDialog(QDialog):
self._radar_config_dir_input = QLineEdit(group)
self._radar_config_dir_input.setPlaceholderText("Directory with radar JSON configs")
self._radar_config_dir_input.editingFinished.connect(self.radar_config_dir_changed.emit)
browse_button = QPushButton("Browse...", group)
browse_button = QPushButton("Browse…", group)
browse_button.clicked.connect(self._choose_radar_config_dir)
dir_row.addWidget(QLabel("Directory"))
dir_row.addWidget(self._radar_config_dir_input, stretch=1)
@@ -160,14 +161,13 @@ class PreprocessDialog(QDialog):
layout.addWidget(self._use_all_radar_configs_checkbox)
return group
def _build_selector_group(self, title: str, keys: tuple[str, ...], parent: QGroupBox) -> QGroupBox:
"""Build one selector subgroup for a channel family."""
group = QGroupBox(title, parent)
form = QFormLayout(group)
def _build_selectors(self, parent: QGroupBox) -> QFormLayout:
"""Build the S21 set selectors in capture order."""
form = QFormLayout()
form.setFieldGrowthPolicy(QFormLayout.FieldGrowthPolicy.AllNonFixedFieldsGrow)
for key in keys:
combo = QComboBox(group)
for key in PREPROCESS_ASSET_NAMES:
combo = QComboBox(parent)
combo.setPlaceholderText("<not selected>")
combo.setProperty("optional", key not in REQUIRED_PREPROCESS_ASSET_KEYS)
self._set_combo_items(combo, [], "")
@@ -175,7 +175,7 @@ class PreprocessDialog(QDialog):
self._set_combos[key] = combo
field = combo
if key == "s21_object_calibration":
field = QWidget(group)
field = QWidget(parent)
row = QHBoxLayout(field)
row.setContentsMargins(0, 0, 0, 0)
row.addWidget(combo, stretch=1)
@@ -183,12 +183,12 @@ class PreprocessDialog(QDialog):
self._create_object_calibration_button.setToolTip("Calculate a MIMO calibration from reflector measurements.")
self._create_object_calibration_button.clicked.connect(self.create_object_calibration_requested.emit)
row.addWidget(self._create_object_calibration_button)
form.addRow(self._asset_row_label(key), field)
return group
form.addRow(preprocess_asset_display_name(key).capitalize(), field)
return form
def _build_sequence_group(self) -> QGroupBox:
"""Build sequential-capture controls and capture log."""
group = QGroupBox("Sequential Capture (Fill Full N*M)", self)
group = QGroupBox("Capture All Antenna Pairs", self)
layout = QGridLayout(group)
self._active_kind_label = QLabel("<none>", group)
@@ -239,6 +239,7 @@ class PreprocessDialog(QDialog):
self._save_sequence_button.setEnabled(False)
self._abort_button = QPushButton("Abort Sequence", parent)
self._abort_button.setProperty("role", "destructive")
self._abort_button.clicked.connect(self.abort_sequence_requested.emit)
self._abort_button.setEnabled(False)
@@ -270,7 +271,6 @@ class PreprocessDialog(QDialog):
placeholder = QLabel("Preview will appear after the first successful capture.", host)
placeholder.setWordWrap(True)
placeholder.setMinimumHeight(320)
layout.addWidget(placeholder)
self._preview_host_layout = layout
@@ -531,8 +531,7 @@ class PreprocessDialog(QDialog):
@staticmethod
def _build_preview_axis(left_label: str, left_units: str) -> "pg.PlotWidget":
"""Return one PlotWidget configured with the project's preview style."""
plot = pg.PlotWidget(background="#101418", enableMenu=False)
plot.showGrid(x=True, y=True, alpha=0.2)
plot = create_plot()
plot.setLabel("bottom", "Frequency", units="Hz")
plot.setLabel("left", left_label, units=left_units)
plot.setMinimumHeight(320)
@@ -554,11 +553,6 @@ class PreprocessDialog(QDialog):
self._radar_config_dir_input.setText(selected_dir)
self.radar_config_dir_changed.emit()
@staticmethod
def _asset_row_label(key: str) -> str:
"""Return short selector label for one preprocess asset."""
return preprocess_asset_display_name(key)
@staticmethod
def _set_combo_items(combo: QComboBox, names: list[str], current_text: str) -> None:
"""Replace combo contents and keep previous value when still available."""