PyQt QProgressBar в Python — создание полосы прогресса
Для создания виджета индикатора выполнения (полосы прогресса) в Python используется класс PyQt QProgressBar.
Введение в PyQt QProgressBar
Виджет индикатора прогресса уведомляет пользователей о ходе выполнения операции и подтверждает, что программа все еще работает.
Для создания виджета индикатора выполнения используйте класс QProgressBar:
QProgressBar()
Индикатор прогресса имеет три важных значения:
- Минимальное значение.
- Максимальное значение.
- Текущее значение шага.
По умолчанию минимальное значение равно нулю, а максимальное — 100.
Чтобы обновить прогресс, вы увеличиваете текущее значение шага. Сделав это, полоса прогресса будет отображать процент выполненных шагов.
Класс QProgressBar использует следующую формулу для расчета хода выполнения шагов:
(current_value - minimum ) /(maximum - minimum)
Например, если current_value равно 50, то процент шагов составляет 50%. Индикатор выполнения будет отображать прогресс следующим образом:
Чтобы задать текущее значение шага, используйте метод setValue(). Чтобы получить текущее значение, используйте метод value(). Чтобы сбросить индикатор выполнения так, чтобы он не показывал прогресс, используйте метод reset().
Если вы не хотите переопределять минимальные и максимальные значения по умолчанию, вы можете использовать методы setMinimum() и setMaximum() для их изменения.
Кроме того, вы можете использовать метод setRange(), чтобы установить как минимальное, так и максимальное значения одновременно:
setRange(minimum, maximum)
Чтобы получить минимальное и максимальное значения, используются методы minimum() и maximum().
На практике вы будете использовать виджет полосы выполнения с потоками для обновления хода выполнения длительных операций.
Пример PyQt QProgressBar
В следующем примере класс QProgressBar используется для создания индикатора выполнения.
Если нажать кнопку прогресса, текущее значение увеличится до максимального. Однако если нажать кнопку сброса, полоса прогресса будет сброшена.
import sys from PyQt6.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QHBoxLayout, QProgressBar from PyQt6.QtCore import Qt class MainWindow(QWidget): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.setGeometry(100, 100, 300, 50) self.setWindowTitle('QProgressBar Demo') layout = QVBoxLayout() self.setLayout(layout) hbox = QHBoxLayout() self.progress_bar = QProgressBar(self) hbox.addWidget(self.progress_bar) layout.addLayout(hbox) hbox = QHBoxLayout() self.btn_progress = QPushButton('Progress', clicked=self.progress) self.bnt_reset = QPushButton('Reset', clicked=self.reset) # align buttons center hbox.addStretch() hbox.addWidget(self.btn_progress) hbox.addWidget(self.bnt_reset) hbox.addStretch() layout.addLayout(hbox) self.current_value = 0 self.show() def reset(self): self.current_value = 0 self.progress_bar.reset() def progress(self): if self.current_value <= self.progress_bar.maximum(): self.current_value += 5 self.progress_bar.setValue(self.current_value) if __name__ == '__main__': app = QApplication(sys.argv) window = MainWindow() sys.exit(app.exec())
Как это работает.
- Сначала создадим индикатор выполнения, используя класс QProgressBar:
self.progress_bar = QProgressBar(self)
- Во-вторых, инициализируем текущее значение:
self.current_value = 0
- В-третьих, увеличьте текущее значение на 5 и обновите его как текущее значение, используя setValue() для индикатора выполнения в методе progress():
def progress(self): if self.current_value <= self.progress_bar.maximum(): self.current_value += 5 self.progress_bar.setValue(self.current_value)
- Наконец, сбросьте текущее значение и вызовите метод reset(), чтобы сбросить индикатор прогресса в методе reset():
def reset(self): self.current_value = 0 self.progress_bar.reset()