实现效果:
- 主题切换
- 在下次打开后,适配历史主题
- 主题内容包括:背景、控件样式
实现原理:
在使用ui编辑界面,我们常用右边的属性栏的styleSheet来编辑此控件的样式表内容,实现单个控件样式的编辑,而实现主题的切换,实质是批量对所有控件进行样式编辑,这种方法就适用于内容较多,且不方便在程序中编写。
实现过程:
我们将所需控件的属性通过编写.Qss文件(也可以直接找现成的)。
在编写多个主题后,加入需适配的界面文件。
下拉框遍历读取主题,读取内容进行主题设置。
设置主题,建立历史记忆。
代码分享:
主题文件结构为:
--style
--QSS-master
--主题1.qss
--主题2.qss
--QSS-now
--NOW.qss
代码:
self.SET()#主题检测
# 初始化主题下拉框
Drop_downBoxContent = self.get_path_file()
for i in Drop_downBoxContent: # 遍历添加
self.comboBox.addItem(i)
# 获取内容进行主题设置
self.comboBox.currentTextChanged.connect(self.setstyles)
def SET(self):
"""
设置初始量
:return:
"""
# 检测设置是否被更新
b = os.path.exists("./style/QSS-now/NOW.qss")#主题
if b == True:
# 1、QSS直接导
style_file = "./style/QSS-now/NOW.qss"
# 2、读取样式文件内容
with open(style_file, "r", encoding="UTF-8") as file:
# 3、加载读取的样式内容
self.style_sheet = file.read()
# 4、完成设置
self.setStyleSheet(self.style_sheet)
self.style = self.style_sheet
def setstyles(self):
"""
设置主题风格
"""
style = self.comboBox.currentText()
# 地址拼接
self.file_address = "./style/QSS-master/" + style + r".qss"
# 主题设置
# 1、QSS直接导
style_file = self.file_address
# 2、读取样式文件内容
with open(style_file, "r", encoding="UTF-8") as file:
# 3、加载读取的样式内容
self.style_sheet = file.read()
# 4、完成设置
self.setStyleSheet(self.style_sheet)
# 5、建立历史记忆
self.file_usering = "./style/QSS-now/" + "NOW" + r".qss"
shutil.copyfile(self.file_address, self.file_usering)
辅助工具:
编写qss工具:QssStylesheetEditor
QSS是来源于CSS,算是Qt定制版的一个CSS子集,可参考
深入了解CSS:CSS 教程
现成qss:
使用QSS美化PyQt界面,分享6套超赞皮肤 - muzing的文章 - 知乎 https://zhuanlan.zhihu.com/p/390192953
学习过程记录,如有问题,望指正(手动鞠躬)!