QSS的全称是Qt Style Sheets,顾名思义Qt样式表。Qt样式表是一种强大的机制,除了通过子类化QStyle已经可以实现的功能外,还允许您自定义窗口小部件的外观。 Qt样式表的概念,术语和语法受到HTML级联样式表(CSS)的启发,QSS是应用于Qt的窗体中。在PyQt5中为了更快捷的绘制界面,UI desinger中同样提供了一个快捷的方法。
Ui designer的编辑对话框
QSS句法格式
- 一般的句法格式
- QTextEdit:是一个选择器,代表这个窗口内的所有QTextEdit控件。
- font:QTextEdit的属性,冒号后面的是值。
- 每一条样式由“ 属性:值” 组成,两条样式用“;”隔开。
QTextEdit{
font: 12pt "华文楷体";
color: rgb(85, 255, 255);
background-color: rgb(85, 255, 255);
}
- 选择器类型
Qt样式表支持CSS2中定义的所有选择器。下表总结了最有用的选择器类型。
这些类型选择可以组合使用
QPlainTextEdit,QTextEdit, QLineEdit{"
font: 12pt \"华文楷体\";
color: rgb(85, 255, 255);
background-color: rgb(85, 255, 255);
"}
- 子控件
为了设置复杂小部件的样式,有必要访问小部件的子控件,例如QComboBox的下拉按钮或QSpinBox的向上和向下箭头。选择器可能包含子控件,可以将规则的应用限制为特定的窗口小部件子控件。例如:
名称为comboBox_2的向上箭头更改为文件夹中的图片。
QComboBox#::drop-down{image: url(C:/Users/12057/Desktop/PyQt5/Demo_22/image/向下.png);}
常用的子控件
- ::down-arrow combo box或spin box的下拉箭头
- ::down-button spin box的向下按钮
- ::drop-down combo box的下拉箭头
- ::indicator checkbox、radio button或可选择group box的指示器
- ::item menu、menu bar或status bar的子项目
- ::menu-indicator push button的菜单指示器
- ::title group box的标题
- ::up-arrow spin box的向上箭头
- 伪状态
选择器可能包含伪状态,表示根据窗口小部件的状态限制规则的应用。伪状态出现在选择器的末尾,中间有冒号(:)。例如,当鼠标悬停在QLabel上时,变成红色。
QLabel#label_2:hover{color:red;}
伪状态可以串联使用,就是类似一个与运算,例如:
如果鼠标移动到一个已经被勾选的checkBox上方时候,其字体变为红色。
QCheckBox:hover:checked{color: red}
伪状态可以并联使用,就是类似一个与或运算,例如:
如果鼠标移动到上方,或者已经被勾选,字体变为红色。
QCheckBox:hover,QCheckBox:checked{color: red}
子控件也可以使用伪状态,例如:
名称为checkBox_2的indicator子控件在check和unchecked的时候显示不同的的图片
#checkBox_2::indicator:checked{image:url(C:/Users/12057/Desktop/PyQt5/Demo_22/image/已经选择.png);}
QCheckBox#checkBox_2::indicator:unchecked{image:url(C:/Users/12057/Desktop/PyQt5/Demo_22/image/未被.png);}
QSS样式表使用
- 如何使用
第一种方法,就是在UI designer中通过编辑框,对当前窗口设置样式表。但是有多个的窗口时候,需要重复设计,工作量很大。
第二种方法,就是新建一个qss文件,读取这个文件中的内容,调用setStyleSheet函数就可以。
QWidget{
background-color: rgb(255, 255, 255);
font: 12pt "BankGothic Lt BT";
}
QPlainTextEdit,QTextEdit, QLineEdit{
font: 12pt "华文楷体";
color: rgb(85, 255, 255);
background-color: rgb(85, 255, 255);
}
QCheckBox#checkBox_2::indicator:checked{
image:url(C:/Users/12057/Desktop/PyQt5/Demo_22/image/已经选择.png);
}
QCheckBox#checkBox_2::indicator:unchecked{
image:url(C:/Users/12057/Desktop/PyQt5/Demo_22/image/未被选择.png);
}
if __name__ == '__main__':
app = QApplication(sys.argv)
file = QFile("Qobj.qss")
file.open(QFile.ReadOnly)
style = file.readAll().data().decode("UTF-8")
app.setStyleSheet(style)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
- 样式的明确定义
多条样式对同一个属性定义了不同的值以后,就会出现冲突,这个label_2的颜色为红色,其余的为绿色。
self.setStyleSheet('''QLabel#label_2:hover{ color:red;}''')
self.setStyleSheet("QLabel:hover{color:green;}")
本篇介绍PyQt5的QSS样式表,如果需要源代码可关注私聊,感谢支持!!!!
本文暂时没有评论,来添加一个吧(●'◡'●)