from PyQt6.QtWidgets import QProgressBar, QWidget, QVBoxLayout, QLabel from PyQt6.QtCore import Qt class LoadingBar(QWidget): def __init__(self, label_text: str = "", parent=None) -> None: super().__init__(parent) layout = QVBoxLayout(self) layout.setAlignment(Qt.AlignmentFlag.AlignBaseline) self.label = QLabel(label_text, self) self.progress = QProgressBar(self) self.progress.setMinimum(0) self.progress.setMaximum(100) layout.addWidget(self.label) layout.addWidget(self.progress) def set_label(self, text: str) -> None: self.label.setText(text) def set_progress(self, value: int) -> None: self.progress.setValue(value) def set_progress_range(self, value: int, min_range: int, max_range: int) -> None: """Set progress within a specific range""" if min_range >= max_range: return # Clamp value to range clamped_value = max(min_range, min(max_range, value)) # Convert to 0-100 scale progress = int(((clamped_value - min_range) / (max_range - min_range)) * 100) self.progress.setValue(progress) def get_progress(self) -> int: """Get current progress value""" return self.progress.value()