Reputation: 65
I was wondering whether it's possible to change the color of a PyQt Progressbar?
I have the following code:
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 is dependable on some early calculations, and to be assumed never calculates to exactly the same value.
I would like the progressbar to turn 'red' when the value is 100 (which the value is set limited at since a progressbar won't show values above 100%), so giving me a better visual image of the fact that the value is 'out of constraint'.
I am aware that .setColor isn't a known command for a Progressbar, but it's just to show my idea.
Does anyone know how to do this, or if it is even possible??
Thx in advance!
Upvotes: 4
Views: 23920
Reputation: 1175
You can sublass QProgressBar and use some style sheet see Customizing Qt Widgets Using Style Sheets and Customizing 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)
Another solution would be to reassign a palette to the QProgressBar which will allow you to have a "style aware" component:
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)
Upvotes: 9