Изменение цвета QProgressbar () - PullRequest
4 голосов
/ 08 июня 2011

Мне было интересно, можно ли изменить цвет индикатора прогресса 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%), поэтому я получаю лучшее визуальное представление о том, что значение «вне ограничений».

Я знаю, что .setColor не является известной командой для Progressbar, но она просто показывает мою идею.

Кто-нибудь знает, как это сделать, или если это вообще возможно?

Спасибо заранее!

1 Ответ

7 голосов
/ 08 июня 2011

Вы можете создать подкласс 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)

unfinished completed

Другим решением было бы переназначить палитру на 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)
...