Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

PyQt でアプリの背景色やテキスト文字の色などの属性を設定する方法

f:id:Kurene:20201209220606p:plain

PyQtを使っていると、背景色やテキスト文字をサクッと設定したいことが多々あります。

各QWidgetオブジェクトごとに設定してもいいのですが、面倒なので、まとめて設定する方法を紹介します。

方法1:QPallete

QPaletteクラスを使うことで、コンポーネントごとに色を管理することができます。

QPalette Class | Qt GUI 5.15.2

以下、ソースコード抜粋

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.layout = QGridLayout()
        
        p = self.palette()
        p.setColor(self.backgroundRole(), QColor('#000')) # 背景色
        p.setColor(self.foregroundRole(), QColor('#0F0')) # テキストの色
        self.setPalette(p)

    # ...

f:id:Kurene:20201209222317p:plain

楽ではありますが、設定したい属性が増えると面倒かもしれません。

方法2:StyleSheet

PyQt ではHTMLでのCSSのように、StyleSheetで属性を制御することができます。

以下、ソースコード抜粋

# ヒアドキュメントで記述
StyleSheet = '''
QWidget {
    background-color: #111111;
    color: #0F0;
} 
QSlider::handle:horizontal {
    background-color: white;
    border: 2px solid #5c5c5c;
    width: 24px;
}
QComboBox {
    border: 1px solid gray;
    border-radius: 3px;
    padding: 1px 18px 1px 3px;
    min-width: 6em;
}
'''

class Window(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        self.layout = QGridLayout()

        # 方法2
        self.setStyleSheet(StyleSheet)

        # ...

f:id:Kurene:20201209222400p:plain

こちらの方法のほうが、GUIを作り込むことができます。 CSSに慣れていれば、学習コストもそう高くなさそうです。

Qt Style Sheets Examples | Qt 4.8

多くのQWidgetの属性を細かく設定したいときはこの方法がよいと思います。

ソースコード