""" Parameter Slider Widget Slider widget with label and value display for parameter adjustment. """ from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QSlider from PyQt5.QtCore import Qt, pyqtSignal from PyQt5.QtGui import QFont class ParameterSlider(QWidget): """ Slider widget for parameter adjustment. Signals: value_changed: Emitted when slider value changes (int) """ value_changed = pyqtSignal(int) def __init__(self, label: str, min_val: int = 0, max_val: int = 100, default_val: int = 50, value_format: str = "{}", parent=None): super().__init__(parent) self.value_format = value_format self.init_ui(label, min_val, max_val, default_val) def init_ui(self, label: str, min_val: int, max_val: int, default_val: int): """Initialize the slider UI.""" layout = QHBoxLayout(self) layout.setContentsMargins(0, 5, 0, 5) layout.setSpacing(10) # Label label_widget = QLabel(label + ":") label_widget.setFont(QFont("Arial", 9)) label_widget.setMinimumWidth(70) layout.addWidget(label_widget) # Slider self.slider = QSlider(Qt.Horizontal) self.slider.setMinimum(min_val) self.slider.setMaximum(max_val) self.slider.setValue(default_val) self.slider.valueChanged.connect(self._on_value_changed) self.slider.setStyleSheet(""" QSlider::groove:horizontal { background: #ecf0f1; height: 15px; border: 1px solid #bdc3c7; border-radius: 2px; } QSlider::handle:horizontal { background: #3498db; width: 20px; margin: -3px 0; border-radius: 3px; } QSlider::sub-page:horizontal { background: #3498db; border-radius: 2px; } """) layout.addWidget(self.slider, 1) # Value label self.value_label = QLabel(self.value_format.format(default_val)) self.value_label.setFont(QFont("Arial", 9)) self.value_label.setMinimumWidth(60) self.value_label.setStyleSheet("color: #2c3e50;") layout.addWidget(self.value_label) def _on_value_changed(self, value: int): """Handle slider value changes.""" self.value_label.setText(self.value_format.format(value)) self.value_changed.emit(value) def get_value(self) -> int: """Get current slider value.""" return self.slider.value() def set_value(self, value: int): """Set slider value.""" self.slider.setValue(value)