Qt:为什么只有一种来自 qss 文件的样式有效

Qt: Why only one style from qss file work

我在我的项目中使用了 qss 文件。整个代码是:

from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys

class Win(QWidget):

    def __init__(self):
        super().__init__()

        self.setStyleSheet(
                           'QWidget{background: rgb(150, 150, 150);};'
                           'QPushButton{background-color: rgb(255, 0, 0); font-size: 100px;};'
                           'QLineEdit{background-color: yellow; font-size:5px;};'
                           )

        layout = QGridLayout()
        self.setLayout(layout)

        lay1 = QVBoxLayout()
        btn1 = QPushButton('btn')
        lay1.addWidget(btn1)
        layout.addLayout(lay1, 0, 0, 1, 1)

        lay2 = QVBoxLayout()
        label1 = QLabel('label')
        lay2.addWidget(label1)
        layout.addLayout(lay2, 0, 1, 1, 1)

        lay3 = QVBoxLayout()
        edit = QLineEdit('edit')
        lay3.addWidget(edit)
        layout.addLayout(lay3, 1, 0, 1, 1)

        layout.setRowStretch(0, 1)
        layout.setRowStretch(1, 1)
        layout.setColumnStretch(0, 1)
        layout.setColumnStretch(1, 1)


if __name__ == '__main__':

    app = QApplication(sys.argv)
    win = Win()
    win.show()
    sys.exit(app.exec_())

我正在使用 ```setStyleSheet` 来控制我的 window,结果是:

我们可以发现只有QWidget{background: rgb(150, 150, 150);}有效。我想让QPushButton的底色变成'QPushButton{background-color: rgb(255, 0, 0); font-size: 100px;};'的红色,而QPushButton的底色居然不是红色。

然后,如果我注释 'QWidget{background: rgb(150, 150, 150);};',新代码是:

        ...
        self.setStyleSheet(
                           # 'QWidget{background: rgb(150, 150, 150);};'
                           'QPushButton{background-color: rgb(255, 0, 0); font-size: 100px;};'
                           'QLineEdit{background-color: yellow; font-size:5px;};'
                           )
        ...

现在,结果是:

我们可以发现'QPushButton{background-color: rgb(255, 0, 0); font-size: 100px;};'有效,但'QLineEdit{background-color: yellow; font-size:5px;};'仍然无效。

如何让这三种样式发挥作用?

'QWidget{background: rgb(150, 150, 150);};'
'QPushButton{background-color: rgb(255, 0, 0); font-size: 100px;};'
'QLineEdit{background-color: yellow; font-size:5px;};'

您的 QSS 语法有误,因为在 } 之后不应该有 ;:

self.setStyleSheet(
    "QWidget{background: rgb(150, 150, 150);}"
    "QPushButton{background-color: rgb(255, 0, 0); font-size: 100px;}"
    "QLineEdit{background-color: yellow; font-size:5px;}"
)

此外,许多样式与 QSS 的行为不同,例如我使用融合样式获得了正确的结果:

app.setStyle("fusion")