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")
我在我的项目中使用了 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")