更改QProgressbar()的颜色
我在想,能不能改变PyQt进度条的颜色呢?
我有以下这段代码:
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的值是根据一些早期的计算得出的,假设这个值不会完全相同。
我希望当值达到100时,进度条能变成“红色”(因为进度条的值上限是100%,所以不会显示超过100%的值),这样可以更直观地告诉我这个值“超出了限制”。
我知道进度条没有.setColor这个命令,但我只是想表达我的想法。
有没有人知道怎么做到这一点,或者说这是否可能呢?
提前谢谢大家!
1 个回答
9
你可以通过创建一个QProgressBar的子类,并使用一些样式表来进行自定义。具体可以参考这两个链接:使用样式表自定义Qt小部件和自定义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)
另一种解决方案是给QProgressBar重新分配一个调色板,这样你就可以拥有一个“样式感知”的组件。
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)