| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- """
- 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)
|