Запаздывающая анимация QProgressBar с текстовым форматом без %vPython

Программы на Python
Ответить
Гость
 Запаздывающая анимация QProgressBar с текстовым форматом без %v

Сообщение Гость »


Я хочу анимировать изменение значения QProgressBar. Я не нашел лучшего решения, чем просто умножить все значения, например, на 1000, а затем анимировать переход. Например, если я хочу изменить значение с 5 на 4, анимация индикатора выполнения меняет значение с 5000 на 4000, но вместо 5000 и 4000 отображаются числа 5 и 4. Вот как я это реализовал:

класс CustomProgressBar(QWidget): def __init__(self, родитель, curr_value: интервал, максимальное_значение: целое): super().__init__(родитель=родитель) self.MULTIPLIER = 1000 макет = QVBoxLayout (сам) self.progress_bar = self.pg = QProgressBar(self) self.progress_bar.setTextVisible(True) self.progress_bar.setAlignment(Qt.AlignmentFlag.AlignCenter) self.progress_bar.setFixedSize(QSize(1000, 100)) self.progress_bar.setMaximum(max_value * self.MULTIPLIER) self.progress_bar.setValue(curr_value * self.MULTIPLIER) display_value = int(self.pg.value() / self.MULTIPLIER) display_max_value = int(self.pg.maximum() / self.MULTIPLIER) self.progress_bar.setFormat(f"{displayed_value}/{displayed_max_value}") макет.addWidget(self.progress_bar) # Анимация self.animation = QPropertyAnimation(self.progress_bar, b"value", self.progress_bar) self.animation.setDuration(500) self.animation.setEasingCurve(QEasingCurve.Type.OutCubic) защита set_value(self, new_value): новое_значение = новое_значение * self.MULTIPLIER, если новое_значение > 0, иначе 0 self.animate_value_change(новое_значение) display_new_value = int(new_value/self.MULTIPLIER) display_max_value = int(self.pg.maximum() / self.MULTIPLIER) self.progress_bar.setFormat(f"{displayed_new_value}/{displayed_max_value}") Защиту animate_value_change(self, new_value): """Анимация изменения значения""" # изменение цвета текста если new_value 0 еще 0 self.animate_value_change(новое_значение) display_new_value = int(new_value/self.MULTIPLIER) display_max_value = int(self.pg.maximum() / self.MULTIPLIER) self.progress_bar.setFormat(f"{displayed_new_value}/{displayed_max_value}") Защиту animate_value_change(self, new_value): """Анимация изменения значения""" # изменение цвета текста если new_value int: вернуть self._value @value.setter значение def (self, значение: int): self._value = значение, если значение >= 0, иначе 0 self.value_changed.emit(self.value) защита make_step (сам): self.value -= self.step процесс def (self, задержка: int | float): время.сон(3) значение_по умолчанию = само.значение пока правда: в то время как self.value: self.make_step() time.sleep(задержка) self.value = значение_по умолчанию time.sleep(задержка) def run(self, задержка: int | float = 1): Thread(target=self.process, args=(delay, ), daemon=True).start() если __name__ == "__main__": приложение = QApplication() виджет = QWidget() макет = QVBoxLayout (виджет) счетчик = МойСчетчик(30, 4) Progress_bar = CustomProgressBar (виджет, 30, 30) counter.value_changed.connect(progress_bar.set_value) макет.addWidget(progress_bar) виджет.шоу() счетчик.run(1) приложение.exec()
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»