本章节介绍如何在
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
表示鼠标在上面且被选中