如何使用样式表设置 qwidget 的背景颜色?

Posted

技术标签:

【中文标题】如何使用样式表设置 qwidget 的背景颜色?【英文标题】:how to set the background color of a qwidget using stylesheets? 【发布时间】:2019-06-21 17:58:54 【问题描述】:

关于 Qt 样式表,我似乎不太了解。我只想将小部件的背景颜色设置为白色。但由于某种原因,背景颜色实际上只出现在我的小部件的孩子中。

我尝试将self.setAutoFillBackground(True) 添加到我的代码中,但没有成功。

我还尝试从https://wiki.qt.io/How_to_Change_the_Background_Color_of_QWidget 调色解决方案。它有效,但前提是我不设置底部边框所需的样式表。

class TopLabelNewProject(qt.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        layout = qt.QHBoxLayout(self)
        layout.setContentsMargins(40, 0, 32, 0)
        self.setLayout(layout)
        self.setFixedHeight(80)
        self.setStyleSheet("""
            background-color: white;
            border-bottom: 1px solid %s;
            """ % colors.gray)

        self.label = qt.QLabel("Dashboard")
        self.label.setStyleSheet("""
            QLabel 
                font: medium Ubuntu;
                font-size: 20px;
                color: %s;
            """ % colors.gray_dark)
        layout.addWidget(self.label, alignment=qt.Qt.AlignLeft)

        self.newProjectButton = Buttons.DefaultButton("New project", self)
        layout.addWidget(self.newProjectButton, alignment=qt.Qt.AlignRight)

注意:Buttons.DefaultButton 只是一个带有自定义样式表的 QPushButton。

这就是我想要实现的,带有标签和按钮的白色标题栏:

但只有标签有白色背景。

【问题讨论】:

我找到了解决方案:self.setAttribute(qt.Qt.WA_StyledBackground, True) 但我不明白为什么需要这样做。在样式表中设置背景颜色非常明确地表明我确实想要“使用样式背景” QWidget does not draw background color的可能重复 【参考方案1】:

试试看:

import sys
from PyQt5 import Qt as qt 

class TopLabelNewProject(qt.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        layout = qt.QHBoxLayout(self)
        layout.setContentsMargins(40, 0, 32, 0)
        self.setLayout(layout)
        self.setFixedHeight(80)

        self.label = qt.QLabel("Dashboard")

        layout.addWidget(self.label, alignment=qt.Qt.AlignLeft)

#        self.newProjectButton = Buttons.DefaultButton("New project", self)
        self.newProjectButton = qt.QPushButton("New project", self)
        layout.addWidget(self.newProjectButton, alignment=qt.Qt.AlignRight)


style = '''
QWidget 
    background-color: white;
 

QLabel 
    font: medium Ubuntu;
    font-size: 20px;
    color: #006325;     
        

QPushButton 
    background-color: #006325;
    color: white;

    min-width:  70px;
    max-width:  70px;
    min-height: 70px;
    max-height: 70px;

    border-radius: 35px;        
    border-width: 1px;
    border-color: #ae32a0;
    border-style: solid;

QPushButton:hover 
    background-color: #328930;

QPushButton:pressed 
    background-color: #80c342;
    

'''


if __name__ == '__main__':
    app = qt.QApplication(sys.argv)

    app.setStyleSheet(style)

    ex = TopLabelNewProject()
    ex.show()
    sys.exit(app.exec_())  

【讨论】:

这行得通,谢谢。显然,如果我不希望我的应用程序中的所有其他 QWidgets 也有白色背景并且我的所有按钮都是绿色和圆形的,我需要更具体地使用我的类型选择器。 但是当我在应用程序而不是小部件上设置样式表时看到不同的结果,这使得样式表机制对我来说更加模糊。 见***.com/questions/52637147/…【参考方案2】:

首先(仅更改一个小部件):右键单击小部件,单击“更改样式表”并打开样式表窗口,当您在窗口内移动某些内容时,小部件也会发生变化。 第二(更改所有选定的小部件):使用属性窗口,标记您要更改的所有小部件,单击styleSheetrow的...。当您现在更改时,样式表窗口会打开,您选择的所有小部件都会更改。

插入样式表:

QLabel

......

背景颜色:黑色;

一个完整的例子:

    QLabel
    border-style: outset;
    border-width: 2px;
    border-color: black;
    Background-color: rgb(255,247,191);
    color: black;
    

有关 Sylesheet 窗口的更多信息,请阅读 https://doc.qt.io/Qt-5/stylesheet-syntax.html

友好的祝福嗅探

【讨论】:

以上是关于如何使用样式表设置 qwidget 的背景颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置QPushButton背景透明样式如QLabel

如何在 PySide 中使用样式表为整个小部件设置背景颜色

如何设置 QWidget 背景颜色?

css如何用一类来改变背景颜色?

在 Qt 中为整个小部件设置样式表

PySide 使用样式表改变 QtoolBox