4

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 がプログレスバーの既知のコマンドではないことは承知していますが、それは私の考えを示すためのものです。

誰かがこれを行う方法を知っていますか、それが可能かどうか??

事前にt​​hx!

4

1 に答える 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)
于 2011-06-08T12:41:18.657 に答える