更改QProgressbar()的颜色

2024-09-30 20:23:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以改变PyQt Progressbar的颜色?

我有以下代码:

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在一些早期的计算中是可靠的,并且假设永远不会计算到完全相同的值。

我希望progressbar在值为100时变为“红色”(由于progressbar不会显示大于100%的值,因此该值被设置为限制值),这样可以更好地直观地显示值“超出限制”的事实。

我知道。setColor不是Progressbar的已知命令,但它只是为了表明我的想法。

有人知道怎么做,或者这是可能的吗??

提前通知!


Tags: 代码fromimport颜色pyqtpyqt4qtguiprogressbar
1条回答
网友
1楼 · 发布于 2024-09-30 20:23:29

您可以子类QProgressBar并使用一些样式表 见Customizing Qt Widgets Using Style SheetsCustomizing 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)

unfinishedcompleted

另一个解决方案是将调色板重新分配给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)

相关问题 更多 >