QSS 语法规则
Qss 和CSS 几乎是相同的。都是由选择器(Selector)+声明(Declaration)。使用使用”属性:值”对设置。使用分号分隔数据(“;”),例如.设置背景颜色和字体颜色
1 | QPushButton{ |
如何加载QSS到相应的组件中?
调用组件(QWidget)中的setStyleSheet()
来设置样式。样式的具有继承,如果对最上层的(QWidget)设置,该QWidget中有相应的组件被选择便会被设置。
QSS 选择器
1、通配选择器: *,
匹配所有控件
2、类型选择器
使用QPushButton
,QLineEdit
。这种特定的控件类型。
QPushButton 会匹配到QPushButton类和子类的实例。
如果想要几种类型的控件设置相同的样式。可以使用”,”来控制。例如:
1 | QPushButton,QLineEdit,QCombox {color:blue} |
等价于:
1 | QPushButton {color:blue} |
3、属性选择器。
属性选择器是最灵活的,选择颗粒的到某一个单一控件的。例如:
1 | btn = QPushButton(self) |
选中该按钮
1 | # 页面主类 |
设置win中的属性name值为”myBtn”的按钮控件设置背景颜色为红色。
4、类选择器
.QPushButton
匹配所有的QPushButton的实列。但是并不会匹配到子类。这要和第二种的类型选择的做区别。这个和CSS选择器不一样
5、ID选择器
#myButton
匹配ID为myButton的控件,控件使用setObjectName("myButton")
设置ID值。这个选择器也是最常使用的。
6、后代选择器
QDialog QPushButton{}
匹配QDialog
容器中的QPushButton
的样式。不管是直间还是间接的。
7、子选择器
QDialog > QPushButton{}
匹配Dialog
中包含的QPushButton
。其中必须要求QPushButton的直接父容器是QDialog。
联合选择使用
(1) 一次设置多种选择器类型,使用”,”。#frameCut,#frameInterrupt,#frameJoin{}
(2) #mytable QPushButton
QSS子控件
复合控件的样式,例如下拉框的箭头,点击之后下拉列表。例如
1
QComboBox::drop-down { image: url(dropdown.png)}
下拉的图片为:dropdown.png
QSS伪装态
伪装态选择器,冒号开头的一个选择表达式。例如:QComboBox:hover{}
鼠标经过的样式。
QComboBox::drop-down:hover{background-color:red;}
复合控件下拉鼠标覆盖样式。:!hover
没有覆盖。
应用页面背景设置
方法一 使用QSS设置窗口背景
(1) 设置背景图片
1 | win = QWidget() |
(2) 设置背景颜色win.setStyleSheet("#MainWindow{background-color: yellow}")
方法二 使用QPalette(调色板)设置窗口背景
(1) 设置背景图片
1
2
3palette = QPalette()
palette.setBrush(QPalette.Background,QBrush(QPixmap("./images/python.jpg")))
win.setPalette(palette)
注意:
当 窗口宽高 < 图片宽高 部分显示图片内容。
当 窗口宽高 > 图片宽高 图片重复填充。
(2) 设置背景颜色
1
2
3palette = QPalette()
palette.setColor(QPalette.Background, Qt.red )
win.setPalette(palette)
方法三 使用painEvent 设置窗口背景
通过重写painEvent方法来设置窗口的背景或者图片
(1) 设置背景图片
1 | def paintEvent(self,event): |
(2) 设置背景色
1 | def paintEvent(self,event): |
不规则窗口的显示
不规则窗口才是美化应用界面,更加随心所欲的设置窗口的关键
setMask()给窗口/组件设置蒙版
可以使用setMask(self,QBitmap)
和setMask(self,QRegion)
。通过重写painEvent()
函数来设置蒙版。Qbitmap获得的是一个二值化后的图像。其中为1白色会不显示,黑色0显示。设置完蒙版的图片之后,再添加背景图片可以完成相应不规则窗体。
蒙版如下:
白色的部分会被镂空(透明)。黑色的部分会正常显示。
设置蒙版
1 | self.pix = QBitmap( "./images/mask2.png" ) |
运行之后的结果:
白色部分会显示桌面的图片
想要什么样的不规则的窗口,只需要设置相应的不规则蒙版才行。
设置控件蒙版之后拖动失效,需要重写鼠标相应的函数
通用的重写
1 | #重定义鼠标按下响应函数mousePressEvent(QMouseEvent)和鼠标移动响应函数mouseMoveEvent(QMouseEvent), |
半透明的样式
设置窗口半透明可以使用setWindowOpacity()
来设置。如果想要组件有相应的颜色并且半透明,可以使用样式来设置。例子的总体效果如下
一、椭圆的窗口样式
使用setMask来设置椭圆的样式。蒙版样式如下:
二、半透明按钮样式
通过使用rgb的透明分量来设置按钮的样式的半透明和颜色background-color: rgb(255, 255, 255,0.5);
。椭圆使用border-radius:5px;
鼠标覆盖按钮和按下按钮时的透明度改变。样式如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17style = """
QPushButton{
border-radius:5px;
background-color: rgb(255, 255, 255,0.5);
color:black;
}
QPushButton:hover{
border-radius:5px;
background-color: rgb(255, 255, 255,0.7);
color:black;
}
QPushButton:Pressed{
border-radius:5px;
background-color: rgb(255, 255, 255,0.9);
color:black;
}
"""
三、退出按钮覆盖的时候会变红
核心,鼠标覆盖按钮的时候,改变按钮的背景图片。
1
2
3
4
5
6
7
8exit_btn_style ="""
QPushButton{
border-image: url(./image/close.png);
}
QPushButton:hover{
border-image: url(./image/close-hover.png);
}
"""