Как запускать QProgressBar в приложении, сразу при его открытии?

Рейтинг: 1Ответов: 1Опубликовано: 18.03.2023

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

Как можно сделать?

Часть кода:

...

    # creating progress bar
    self.progressBar = QProgressBar(self)
    # setting its size
    self.progressBar.setGeometry(25, 45, 335, 30)
    self.progressBar.move(200, 100)

def Handle_Progress(self):
    count = 0
    while count < 50:
        count += 1
        time.sleep(random.uniform(0, 2))
        self.progressBar.setValue(count)

...

Ответы

▲ 1Принят

Пожалуйста, всегда предоставляйте минимально-воспроизводимый пример.

Нельзя использовать time.sleep() в основном потоке, это блокирует интерфейс.

Класс QTimer предоставляет повторяющиеся и однократные таймеры.

import sys
from PyQt5 import QtWidgets, QtGui, QtCore


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()

        self.centralwidget = QtWidgets.QWidget()
        self.setCentralWidget(self.centralwidget)

        self.count = 0
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setProperty("value", self.count)
        self.progressBar.setAlignment(QtCore.Qt.AlignCenter)
        self.progressBar.setMaximum(49)
        
        self.layout = QtWidgets.QVBoxLayout(self.centralwidget)
        self.layout.addWidget(self.progressBar)

        self.timer = QtCore.QTimer()
        self.timer.setInterval(100)
        self.timer.timeout.connect(self.handle_progress)

        QtCore.QTimer.singleShot(100, self.timer.start)
        
    def handle_progress(self):
        if self.count < 50:
            self.progressBar.setValue(self.count)        
            self.count += 1 
        else:
            self.timer.stop()
        print(f'{self.count}')


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(450, 350)
    w.show()
    sys.exit(app.exec())    

введите сюда описание изображения