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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
Python中让MySQL查询结果返回字典类型的方法
Aug 22 Python
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
Python数据操作方法封装类实例
Jun 23 Python
pandas中Timestamp类用法详解
Dec 11 Python
python将txt文件读取为字典的示例
Dec 22 Python
详解Python的数据库操作(pymysql)
Apr 04 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
Python如何输出整数
Jun 07 Python
Python实现Keras搭建神经网络训练分类模型教程
Jun 12 Python
python判断变量是否为列表的方法
Sep 17 Python
详解Python模块化编程与装饰器
Jan 16 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
PHP5 安装方法
2006/10/09 PHP
PHP中SESSION使用中的一点经验总结
2012/03/30 PHP
PHP文章按日期(月日)SQL归档语句
2012/11/29 PHP
php实现发送微信模板消息的方法
2015/03/07 PHP
Yii的Srbac插件用法详解
2016/07/14 PHP
PHP+mysql实现从数据库获取下拉树功能示例
2017/01/06 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
JavaSript中变量的作用域闭包的深入理解
2014/05/12 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
使用Chrome浏览器调试AngularJS应用的方法
2015/06/18 Javascript
JS实现的跨浏览器解析XML文件实例
2016/06/21 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
BootStrap 图标icon符号图标glyphicons不正常显示的快速解决办法
2016/12/08 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
javascript trie前缀树的示例
2018/01/29 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
微信小程序学习笔记之本地数据缓存功能详解
2019/03/29 Javascript
js实现左右轮播图
2020/01/09 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
Python中如何优雅的合并两个字典(dict)方法示例
2017/08/09 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
解决Python中list里的中文输出到html模板里的问题
2018/12/17 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
应征英语教师求职信
2013/11/27 职场文书
数控技术专科生自我评价
2014/01/08 职场文书
总经理助理工作职责
2014/02/06 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
人资专员岗位职责
2014/04/04 职场文书
销售个人求职信范文
2014/04/28 职场文书
2014初中数学教研组工作总结
2014/12/19 职场文书
资料员岗位职责范本
2015/04/13 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP