QSS样式解析器
将原本不易操作的字符串静态样式,变为易操作的动态样式.
注:字符串静态样式值的是原本写在setStyleSheet()中的样式,这里的样式对于需要动态修改时,十分的困难,当然你可以使用正则表达式,但是你想修改特定控件下的某个样式,即便是编写正则,也会显的非常繁琐,且容易出错,而QSS样式解析器的诞生就是为了解决这一系列问题.
导入方式
from PyQtGuiLib.styles import QssStyleAnalysis
一个简单例子来演示
from PyQtGuiLib.header import (
PYQT_VERSIONS,
QApplication,
sys,
QWidget,
QPushButton,
QLabel,
Qt,
)
from PyQtGuiLib.styles import QssStyleAnalysis
class Test(QWidget):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.resize(600,600)
self.setAttribute(Qt.WA_StyledBackground,True)
self.l = QLabel("测试标签",self)
self.btn = QPushButton("测试按钮",self)
self.btn.setObjectName("btn")
self.btn2 = QPushButton("测试按钮2号",self)
self.l.move(30, 30)
self.btn.resize(150, 80)
self.btn.move(80, 80)
self.btn2.resize(100,60)
self.btn2.move(250,80)
'''
解析 测试1
'''
# 创建一个针对整个窗口的 QSS 解析器
self.qss = QssStyleAnalysis(self)
# 对窗口上所有按钮,标签设置样式
self.qss.setQSS('''
/*===========这是一个按钮的QSS============*/
QPushButton{
color: rgb(0, 255, 127);
background-color:rgb(0, 170, 0);
}
/*
这是标签的样式
*/
QLabel{
color: rgb(42, 55, 127);
background-color:rgb(255, 170, 0);
}
''')
print(self.qss.toStr()) # 返回样式的原始的类型
print(self.qss.toDict()) # 返回样式的字典类型
# 更新按钮的前景色
self.qss.selector("QPushButton").updateAttr("color","yellow")
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Test()
win.show()
if PYQT_VERSIONS in ["PyQt6","PySide6"]:
sys.exit(app.exec())
else:
sys.exit(app.exec_())
在这个例子中QssStyleAnalysis(self)这句话就是实例化的QSS解析器,这里的参数self表示的是我想要
操作窗口的样式,setQSS()这个方法与setStyleSheet()都是一样的设置一个字符串样式,在这个例子在更新了按钮color的值,修改完成立即生效,看起来是不是很方便
下面来详情介绍方法的使用
setQSS(qss:str)
功能: 设置一个字符串样式
setQSSDict(qss_dict:dict)
功能: 设置一个字典形式的样式
{ "QPushButton":{ "color":"rgb(0, 255, 127)", "background-color":"rgb(0, 170, 0)" } }
appendQSS(qss:str)
功能: 追加一个字符串样式(如果追加样式存在的,直接融合)
appendQSSDict(qss_dict:dict)
功能: 追加一个字典形式的样式(如果追加样式存在的,直接融合)
selector(ang:Ang)
功能: 返回一个选中器的QSS对象(参数是字符串或者是数字)
这里的选择器是值的是样式的选择器,比如:QPushButton,QLabel,#abc,QPushButton:hover,... 这些都是选择器
返回值: QSS对象
selectorKey(key:str)
功能: 根据选择器来返回QSS对象
返回值: QSS对象
selectorIndex(i:int)
功能: 根据索引来返回QSS对象
返回值: QSS对象
removeSelector(ang:Ang)
功能: 移除该选择器/索引下的所有样式
removeSelectorKey(key:str)
功能: 移除该选择器下的所有样式
removeSelectorIndex(index:int)
功能: 通过索引移除选择器下所有样式
isSelectKey(key:str)
功能: 判断选择器是否存在
返回值: 布尔类型
toStr()
功能: 返回样式的字符串形式(如果样式中有注释,则去掉注释)
toDict()
功能: 返回样式的字典形式(如果样式中有注释,则去掉注释)
header()
功能: 返回选择器列表
count()
**功能:**返回控件样式的数量
QSS对象
header()
功能: 返回选择器字符串
headerSubdivision()
功能: 返回一个选择器列表
假设选择器是 QWidget #btn 是这样的写的 那么header()返回的就是QWidget #btn 而headerSubdivision()返回的是 [QWidget,#btn]
body()
功能: 返回当前选择下面的所有样式的字符串
bodySubdivision()
功能: 返回当前选取器下样式的列表形式
bodyToDict()
功能: 返回当前选取器下样式的字典形式
toDict()
功能: 返回当前样式的字典形式
attr(key:str)
功能: 获取一个属性的值
比如 color:red; attr("color") 返回的是 red
updateAttr(key:str,value:str)
功能: 更新/增加一个属性
removeAttr(key:str)
功能: 移除某个属性
isAttr(key:str)
功能: 判断一个属性是否存在
返回类型: 布尔类型
toStr()
功能: 返回当前样式字符串