@nyar_roller
Молодой, перспектиный Python Developer

Как реализовать PYQT5 ProgressBar в реальном времени?

Есть PyQt5 приложение, при нажатии на кнопку, запускается цикл длинною приблизительно в тысячу операций. Мне нужно, чтобы после каждой прокрутки цикла обновлялся прогресбар, на данный момент это реализовано следующим образом:
class MyForm(QtWidgets.QDialog): #Окно отправки сообщения
    def __init__(self, parent = None):
        super(MyForm, self).__init__(parent)
        self.form = Ui_Dialog() 
        self.form.setupUi(self)
        self.progressBar = QtWidgets.QProgressBar(self) #Создание прогресбара
        self.progressBar.setGeometry(QtCore.QRect(80, 740, 811, 23))
        self.btn = QPushButton("SomebodyButton")
        self.btn.pressed.connect(self.start)
   def SomebodyButton(self):
        procent = 100 / len(mas) #Расчёт прогрес бара
        value = 0 #Начальное значение         
        for i in range(mas):
           somebodyFunc()
           for i in range(round(procent) + 1):
              value += 1
              self.progressBar.setValue(value)
              time.sleep(0.1)


Какие есть варианты оптимизации данного кода с использованием нескольких процессов, то есть обновлять прогрессбар параллельно с выполнением кода?
  • Вопрос задан
  • 974 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Запускать из обработчика нажатия кнопки QThread, в котором выполнять цикл и на каждой итерации отправлять сигнал в главный поток, а в главном потоке обновлять progressbar в обработчике сигнала.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы