一、QSS(Qt样式表)
给gui界面设置样式时,对每一个控件都用setStyleSheet()方法太过繁琐,这里提供了一个较为简便的方法,即创建qss样式文件,在文件中设置各种的样式,然后父控件只需要setStyleSheet(xxx.qss样式i文件)就可以成功应用所设置的样式了。
例如:
#1 创建xxx.qss文件
QLabel#l1{
background-color : cyan
}
QLabel#l2{
background-color : Green
}
#注意: 上述qss文件中的 QLabel #l1 表示对QLabel控件中编号为l1的控件进行设置,#是定位符
#2 调用qss文件
app =QApplication(sys.argv)
w = QWidget()
Label1 = QLabel("xx1",w)
Label1.setObjectName("l1") #设置编号为l1
Label2 = QLabel("xx2",w)
Label2.setObjectName("l2")
Label2.move(100,100)
w.show()
with open("xxx.qss","r") as f:
content = f.read()
app.setStyleSheet(content)
sys.exit(app.exec_())
qss文件的语法格式:qss选择器 : 伪状态 {qss声明}
qss选择器的作用就是选择想要修改样式的具体控件,伪状态就是控件的状态,qss声明就是具体的样式代码。
例如:
QLabel#l1 : hover{
background-color : red
}
QLabel#l1{
background-color : cyan
}
鼠标放上去的时候(hover状态)标签l1的颜色为红色,鼠标不在标签上时为青蓝色。
1.1 qss选择器类别
①通配符选择器,即选定所有控件。
* {qss声明}
②类型选择器,选定指定类型及其所有子类控件。
QPushButton {qss声明} #选定所有QPushButton控件及其子类控件,并应用qss声明的样式
③类选择器,仅选定指定类型控件
.QPushButton {qss声明} #选定所有QPushButton控件,并应用qss声明的样式
④ID选择器,用符号“#”来指定需要更改样式的控件
label1 = QLabel(w)
Label1.setObjectName("l1") 将label1的ID设置为“l1”
qss文件:
#指定QLabel类型的l1控件更改背景颜色为红色
QLabel#l1 {
background-color : red
}
⑤属性选择器,通过控件的某个属性值来匹配样式
label1 = QLabel(w)
Label1.setProPerty("notice_level","warning") 给label1设置一个notice_level属性并赋值为warning
qss文件:
#指定QLabel类型控件中notice_level属性为warning的控件的边框为红色
.QLabel['notice_level'='warning'] {
border :3px solid red
}
⑥后代选择器,只选择该控件直接或间接包含的所有控件
qss文件:
#选定id为w1的控件中所有的QLabel控件
QWidget#w1 QLabel {
background-color : red
}
⑦子选择器,只选择该控件直接包含的控件。
qss文件:
#选定id为w1的控件中直接包含的QLabel控件
QWidget#w1>QLabel {
background-color : red
}
⑦子控件选择器,只选择某一复合控件(例如复选框,有框和文本两部分组成)中的一部分。
如果有多组控件设置同一样式,可以用一个选择器,后面放多个控件,控件之间用逗号隔开即可。
1.2 QSS伪状态
1.3 样式设置
如下图所示的盒子模型,pyqt界面中的大多数控件都符合以下模型,当你修改样式时可参照图中所示边框参数进行修改。
每个边框都有三个方面:样式、宽度和颜色。
样式设置:
通常在qss文件中进行设置,例如:
QLable {
background-color:cyan;
board-width:6px;
board-style:groove
}
宽度设置:
颜色设置:
渐变色:
1.4 边框处理
把某个矩阵的直角换成圆弧,这个圆弧的绘画只需要确定半径即可,因为圆心一定是在直角的角平分线上。
1.4 背景设置
1.5 字体类型和颜色设置
实验代码:
实验代码:
二、控制控件中的子控件
qss文件中控制向上向下按钮控件的代码
qss文件中控制向上按钮靠近左侧代码:
效果: