PyQt5-如何用qss文件设置控件样式
1、控件的样式设置:setStyleSheet(str)
用来设置控件的样式,参数是字符串类型,格式是(属性名:值;)多个属性和值要用分号分开;
def test_01(self):
lab=QLabel(self)
lab.setGeometry(20,20,310,50)
lab.setText('高楼万丈平地起')
lab.setStyleSheet('background-color:red;'
'font-size:40px;'
'color:yellow')
上例中样式表中的参数修饰了lab的样式。

2、因为样式表内容多,而且很多控件都使用相同的样式,为了方便管理及使用,就将样式表与代码分离开,使用的时候调用即可方法就是创建qss文件样式表。
创建后缀为.qss的文件:选择认为方便的路径存放,如果qss文件不是在本工作目录下,应提供绝对路径。

1、qss选择器的设置:
1)qss文件的内容是有花括号{}括起来的setStlyeSheet()的字符串参数。
2)qss文件可以写多个类型的控件样式,故此每个样式应在花括号前加选择器。
3)选择器就是控件的类名,
例如:
QLabel {
background-color:red;
font-size:40px;
color:yellow;
}
为了看起来清晰,故每个属性可以换行缩进。

2、qss文件的读取:
1)用读取文件的步骤来获取文件内容:
with open('Qobj.qss', 'r') as f:f.read()
2)用全局的应用程序对象qApp调用setStyleSheet(),把读到的文件内容做参数。
例如:
with open('Qobj.qss', 'r') as f:
qApp.setStyleSheet(f.read())
此时所有QLabel类控件都会是一样的样式

1、假如上例中需要再添加一个标签,同样是QLabel控件,而不想使用选择器的样式,这时就用到ID选择器。
这里涉及到一个知识点就是QObject对象的一个方法,setObjectName(),看下面的链接。这个设置的名字就可以作为一个ID。
因为QObject类是控件类的基类,所以,用setObjectName()也可以给QLabel等这样的控件设置对象名(也就是ID)。
例如:
lab1 = QLabel(self)
lab1.setGeometry(20, 20, 310, 50)
lab1.setText('高楼万丈平地起')
lab1.setObjectName('Normal')
意思就是把具有同样控件类型且有相同样式的控件设置为相同的ID,而不需要样式的相同类型的控件不设置相同的ID,或不设置ID。

2、qss文件内写法:
在选择器后面加#ID,即可。
此时具有相同ID的同类控件就有了相同的样式。
QLabel#Normal{
background-color:red;
font-size:40px;
color:yellow;
}

1、同样涉及到QOject基类的一个方法setProperty(),为控件设置属性:
lab1 = QLabel(self)
lab1.setGeometry(20, 20, 310, 50)
lab1.setText('高楼万丈平地起')
lab1.setObjectName('Normal')
lab1.setProperty('level','small')

2、在qss文件里的写法是,在ID名字后面用中括号[]包裹属性的名字=用引号包括的值:
例如:
QLabel#Normal[level="small"]{
background-color:green;
font-size:10px;
color:yellow;
}

3、这样就把相同类型和相同ID的控件加以区分。

1、掌握QObject类的方法。
为控件设置ID,和属性。
qss文件的写法。要和代码中选择器,id, 属性对应。
qss文件的读取。用全局程序对象调用setStyleSheet(),参数是读取的内容。