本章节介绍如何在
pyqt5
中设置样式,让页面更加美观,如果不熟悉样式的朋友可以先看下前端样式,其实pyqt5
中的样式与前端中css
样式类似。参考链接
一、在py
文件中直接使用样式
- 1、直接单独一个组件定义样式
# 给按钮btn设置样式
self.btn.setStyleSheet('background: cyan; border: none; color: #fff;')
- 2、设置通用样式(只要是
QPushButton
按钮的都会设置该样式)
self.setStyleSheet('QPushButton {background: cyan; border: none; color: #fff;}')
- 3、给组件设置
id
属性
self.btn1.setObjectName('btn1')
self.setStyleSheet('QPushButton#btn1{color: #f00; font-size: 20px;}')
二、单独定义一个xx.qss
文件来写样式
注意点:在
pyqt5
中相同的样式好像只能使用一次,与前端css
样式有区别
- 1、定义样式
QPushButton{
background: cyan;
border: none;
color: #fff;
}
QPushButton:btn1 {
font-size: 18px;
}
- 2、在
py
中引入样式
def init_ui(self):
self.btn.resize(100, 30)
self.btn.move(100, 30)
self.btn1.resize(100, 30)
self.btn1.move(100, 80)
self.btn1.setObjectName('btn1')
with open('./test1.qss', 'r') as f:
self.setStyleSheet(f.read())
三、定义一个工具方法
在手写代码的时候我们会使用外部样式的方式,但是不可能每次都是使用打开文件、读文件信息的方式进行操作,需要封装一个工具方法
- 1、新建一个文件
qss_tools.py
并定义一个类
class QssTools(object):
"""
定义一个读取样式的工具类
"""
@classmethod
def set_qss_to_obj(cls, file_path, obj):
with open(file_path, 'r') as f:
obj.setStyleSheet(f.read())
- 2、使用
import sys
from PyQt5.Qt import *
from qss_tools import QssTools
class Window(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('使用工具方法')
self.resize(500, 500)
self.move(400, 200)
self.btn = QPushButton('按钮', self)
self.btn1 = QPushButton('按钮一', self)
self.init_ui()
def init_ui(self):
self.btn.resize(100, 30)
self.btn.move(100, 30)
self.btn1.resize(100, 30)
self.btn1.move(100, 80)
# 直接使用类方法
QssTools.set_qss_to_obj('./test1.qss', self)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
四、关于pyqt5
中常见的选择器
- 1、通配符选择器,直接使用
*
- 2、类型选择器(或者叫属性选择器),直接使用组件的类型,比如
QLable
、QPushButton
- 3、
id
选择器,需要使用setObjectName
设置id
(注意一个页面中只能只有一个相同的id
) - 4、类选择器,直接是类型选择器前面加
.
# 表示全部的QPushButton属性
.QPushButton{
background: cyan;
border: none;
color: #fff;
}
- 5、属性选择器
- 1.定义样式
.QLabel[level="error"] {
color: #f00;
}
.QLabel[level="success"] {
color: green;
}
.QLabel[level="warning"] {
color: #f90;
}
* 2、定义属性及使用样式
import sys
from PyQt5.Qt import *
from qss_tools import QssTools
class Window(QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle('属性选择器')
self.resize(500, 500)
self.move(400, 200)
self.label1 = QLabel('文本一', self)
self.label2 = QLabel('文本二', self)
self.label3 = QLabel('文本三', self)
self.init_ui()
def init_ui(self):
self.label1.move(100, 10)
self.label2.move(100, 50)
self.label3.move(100, 100)
# 分别设置属性
self.label1.setProperty('level', 'error')
self.label2.setProperty('level', 'success')
self.label3.setProperty('level', 'warning')
QssTools.set_qss_to_obj('./test1.qss', self)
....
- 6、后代选择器
- 7、子选择器
- 8、子控件选择器
五、关于子控件选择器
关于子控件选择器的认识:用来刷选一个复合控件上的子控件,使用方式(复合控件::子控件)
- 1、对于
QCheckBox
和QRadioButton
的子控件indicator
QCheckBox::indicator {
image: url('./checkout1.png');
width: 20px;
height: 20px;
}
- 2、对于
QComboBox
的子控件drop-down
(修改下拉框箭头的样式)
QComboBox::drop-down {
image:url('./dropdown.png');
}
六、伪类选择器
- 1、
:checked
: 按钮控件被选中 - 2、
:unchecked
:按钮控件未被选中 - 3、
:indeterminate
:对于checkBox
或者redioButton
部分选中(三态的时候) - 4、
:hover
:控件被鼠标放上去 - 5、
:pressed
:控件被按下 - 6、
:focus
:控件获取焦点 - 7、
:disabled
:控件禁用 - 8、
:enabled
:控件有效的时候 - 9、
:on
:控件属于on
状态 - 10、
:off
: 控件处于off
状态 - 11、关于伪类取反的操作
:!checked
- 12、伪类连接使用
:hover:checked
表示鼠标在上面且被选中