Как запускать QProgressBar в приложении, сразу при его открытии?
Я хочу сделать 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 шт):
Автор решения: S. Nick
→ Ссылка
Пожалуйста, всегда предоставляйте минимально-воспроизводимый пример.
Нельзя использовать 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())
