Cambiar el color de un QProgressbar ()

Me preguntaba si es posible cambiar el color de una barra de progreso de PyQt.

Tengo el siguiente código:

from PyQt4 import QtGui, QtCore Pbar1 = QtGui.QProgressBar() Pbar1.setParent(Frame1) Pbar1.setGeometry(0, 0, 306, 30) Pbar1.setValue(Frame1Value) if Pbar1.value == 100 ......Pbar1.setColor(Red) 

Frame1Value depende de algunos cálculos iniciales, y se supone que nunca se calcula exactamente el mismo valor.

Me gustaría que la barra de progreso se vuelva ‘roja’ cuando el valor es 100 (cuyo valor se establece limitado ya que una barra de progreso no mostrará valores por encima del 100%), por lo que me da una mejor imagen visual del hecho de que el valor es ‘fuera de restricción’.

Soy consciente de que .setColor no es un comando conocido para una Barra de progreso, pero es solo para mostrar mi idea.

    ¿Alguien sabe cómo hacer esto, o si es posible?

    Gracias por adelantado!

    Puede hacer una sub-clase de QProgressBar y usar alguna hoja de estilo, consulte Personalizar los widgets de Qt con hojas de estilo y Personalizar QProgressBar :

     from PyQt4 import QtGui, QtCore DEFAULT_STYLE = """ QProgressBar{ border: 2px solid grey; border-radius: 5px; text-align: center } QProgressBar::chunk { background-color: lightblue; width: 10px; margin: 1px; } """ COMPLETED_STYLE = """ QProgressBar{ border: 2px solid grey; border-radius: 5px; text-align: center } QProgressBar::chunk { background-color: red; width: 10px; margin: 1px; } """ class MyProgressBar(QtGui.QProgressBar): def __init__(self, parent = None): QtGui.QProgressBar.__init__(self, parent) self.setStyleSheet(DEFAULT_STYLE) def setValue(self, value): QtGui.QProgressBar.setValue(self, value) if value == self.maximum(): self.setStyleSheet(COMPLETED_STYLE) 

    inconclusoterminado

    Otra solución sería reasignar una paleta a QProgressBar que le permitirá tener un componente “sensible al estilo”:

     class MyProgressBar(QtGui.QProgressBar): def setValue(self, value): QtGui.QProgressBar.setValue(self, value) if value == self.maximum(): palette = QtGui.QPalette(self.palette()) palette.setColor(QtGui.QPalette.Highlight, QtGui.QColor(QtCore.Qt.red)) self.setPalette(palette)