python GUI库图形界面开发之PyQt5动态加载QSS样式文件


Posted in Python onFebruary 25, 2020

在Qt中经常需要使用样式,为了降低耦合性(与逻辑代码分离),我们通常会定义一个QSS文件,然后编写各种控件(QLabel,QLIneEdit,QPushButton等)的样式,最后使用QApplication或QMainWindow来加载样式,这样就可以让整个应用程序共享一种样式了

编写QSS

首先新建一个扩展名为.qss的文件,如style.qss,然后将其加入资源文件(.qrc)中,在style.qss文件中编写样式代码,例如

QMainWindow{
    border-image:url(./images/screen1.jpg);

}

QToolTip{
    border: 1px solid rgb(45, 45, 45);
    background: white;
    color: red;
}

加载QSS

为了方便以后使用,可以编写一个公共类COmmomHelper,其核心代码如下

class CommonHelper:
  def __init__(self):
    pass

  @staticmethod
  def readQss(style):
    with open(style, 'r') as f:
      return f.read()

然后在主函数进行加载,其核心代码如下

app = QApplication(sys.argv)
  win = MainWindow()

  styleFile = './style.qss'
  qssStyle = CommonHelper.readQss(styleFile)
  win.setStyleSheet(qssStyle)

  win.show()
  sys.exit(app.exec_())

在换样式时,不需要全局修改,只需要CommomHelper.readQSS()读取不同的QSS文件即可

完整代码如下

注意第一步的qss文件的建立,下面会用到

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QVBoxLayout, QPushButton


class CommonHelper:
  def __init__(self):
    pass

  @staticmethod
  def readQss(style):
    with open(style, 'r') as f:
      return f.read()

class MainWindow(QMainWindow):
  def __init__(self, parent=None):
    super(MainWindow, self).__init__(parent)
    self.resize(477, 258)
    self.setWindowTitle("加载QSS文件")
    btn1 = QPushButton(self)
    btn1.setText('添加')
    btn1.setToolTip('测试提示')
    vbox = QVBoxLayout()
    vbox.addWidget(btn1)

    self.setLayout(vbox)


if __name__ == "__main__":
  app = QApplication(sys.argv)
  win = MainWindow()

  styleFile = './style.qss'
  qssStyle = CommonHelper.readQss(styleFile)
  win.setStyleSheet(qssStyle)

  win.show()
  sys.exit(app.exec_())

没有加载样式时,窗口样式

python GUI库图形界面开发之PyQt5动态加载QSS样式文件

加载样式后,窗口样式

python GUI库图形界面开发之PyQt5动态加载QSS样式文件

本文介绍了如何在窗口运行状态下动态加载QSS样式文件改变窗口样式,更多关于QSS样式的文章请查看下面的相关链接

Python 相关文章推荐
Python学习笔记之常用函数及说明
May 23 Python
python查询sqlite数据表的方法
May 08 Python
详解Python函数作用域的LEGB顺序
May 14 Python
python 如何快速找出两个电子表中数据的差异
May 26 Python
Python正则捕获操作示例
Aug 19 Python
Python模拟三级菜单效果
Sep 11 Python
tensorflow 打印内存中的变量方法
Jul 30 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
Django如何批量创建Model
Sep 01 Python
python两个list[]相加的实现方法
Sep 23 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 Python
Python matplotlib安装以及实现简单曲线的绘制
Apr 26 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 #Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 #Python
python统计函数库scipy.stats的用法解析
Feb 25 #Python
Python Websocket服务端通信的使用示例
Feb 25 #Python
Python GUI库PyQt5样式QSS子控件介绍
Feb 25 #Python
浅谈python累加求和+奇偶数求和_break_continue
Feb 25 #Python
Python GUI库PyQt5图形和特效样式QSS介绍
Feb 25 #Python
You might like
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
php+xml结合Ajax实现点赞功能完整实例
2015/01/30 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
PHP实现验证码校验功能
2017/11/16 PHP
JS cookie中文乱码解决方法
2014/01/28 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
Jquery简单分页实现方法
2015/07/24 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
angular+webpack2实战例子
2017/05/23 Javascript
js字符限制(字符截取) 一个中文汉字算两个字符
2017/09/12 Javascript
新手vue构建单页面应用实例代码
2017/09/18 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
WEEX环境搭建与入门详解
2019/10/16 Javascript
Vuex模块化应用实践示例
2020/02/03 Javascript
详解使用mocha对webpack打包的项目进行"冒烟测试"的大致流程
2020/04/27 Javascript
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
2019/08/29 Python
mac使用python识别图形验证码功能
2020/01/10 Python
HTML5之SVG 2D入门3—文本与图像及渲染文本介绍
2013/01/30 HTML / CSS
美国男士内衣品牌:Tommy John
2017/12/22 全球购物
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
护理职业应聘自荐书
2013/09/29 职场文书
护理职业生涯规划书
2014/01/24 职场文书
防灾减灾活动总结
2014/08/30 职场文书
讲文明知礼仪演讲稿
2014/09/13 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
教师作风建设剖析材料
2014/10/11 职场文书
工作保证书
2015/01/17 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
Anaconda配置各版本Pytorch的实现
2021/08/07 Python
js作用域及作用域链工作引擎
2022/07/07 Javascript