PyQt QProgressBar в Python — создание полосы прогресса

Для создания виджета индикатора выполнения (полосы прогресса) в Python используется класс PyQt QProgressBar.

Введение в PyQt QProgressBar

Виджет индикатора прогресса уведомляет пользователей о ходе выполнения операции и подтверждает, что программа все еще работает.

Для создания виджета индикатора выполнения используйте класс QProgressBar:

QProgressBar()

Индикатор прогресса имеет три важных значения:

  • Минимальное значение.
  • Максимальное значение.
  • Текущее значение шага.

По умолчанию минимальное значение равно нулю, а максимальное — 100.

Чтобы обновить прогресс, вы увеличиваете текущее значение шага. Сделав это, полоса прогресса будет отображать процент выполненных шагов.

Класс QProgressBar использует следующую формулу для расчета хода выполнения шагов:

(current_value - minimum ) /(maximum - minimum)

Например, если current_value равно 50, то процент шагов составляет 50%. Индикатор выполнения будет отображать прогресс следующим образом:

Пример PyQt QProgressBar

Чтобы задать текущее значение шага, используйте метод setValue(). Чтобы получить текущее значение, используйте метод value(). Чтобы сбросить индикатор выполнения так, чтобы он не показывал прогресс, используйте метод reset().

Если вы не хотите переопределять минимальные и максимальные значения по умолчанию, вы можете использовать методы setMinimum() и setMaximum() для их изменения.

Кроме того, вы можете использовать метод setRange(), чтобы установить как минимальное, так и максимальное значения одновременно:

setRange(minimum, maximum)

Чтобы получить минимальное и максимальное значения, используются методы minimum() и maximum().

На практике вы будете использовать виджет полосы выполнения с потоками для обновления хода выполнения длительных операций.

Пример PyQt QProgressBar

В следующем примере класс QProgressBar используется для создания индикатора выполнения.

Если нажать кнопку прогресса, текущее значение увеличится до максимального. Однако если нажать кнопку сброса, полоса прогресса будет сброшена.

PyQt 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()
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *