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新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
Python实现输出某区间范围内全部素数的方法
May 02 Python
Python实现的建造者模式示例
Aug 06 Python
Django框架用户注销功能实现方法分析
May 28 Python
pyinstaller打包多个py文件和去除cmd黑框的方法
Jun 21 Python
基于Python的ModbusTCP客户端实现详解
Jul 13 Python
python3+django2开发一个简单的人员管理系统过程详解
Jul 23 Python
使用Python串口实时显示数据并绘图的例子
Dec 26 Python
Python基于paramunittest模块实现excl参数化
Apr 26 Python
win10下python3.8的PIL库安装过程
Jun 08 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
在PWS上安装PHP4.0正式版
2006/10/09 PHP
php下获取客户端ip地址的函数
2010/03/15 PHP
php获取字符串中各个字符出现次数的方法
2015/02/23 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
Array.prototype 的泛型应用分析
2010/04/30 Javascript
js中符号转意问题示例探讨
2013/08/19 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
js实现随机点名小功能
2017/08/17 Javascript
js实现图片局部放大效果详解
2019/03/18 Javascript
php结合js实现多条件组合查询
2019/05/28 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
2019/09/24 Javascript
VuePress 中如何增加用户登录功能
2019/11/29 Javascript
JS自定义滚动条效果
2020/03/13 Javascript
查找Vue中下标的操作(some和findindex)
2020/08/12 Javascript
简单实现python画圆功能
2018/01/25 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
2018/12/31 Python
Python基本数据结构与用法详解【列表、元组、集合、字典】
2019/03/23 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
委托证明的格式
2014/01/10 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
招标授权委托书样本
2014/09/23 职场文书
2014年帮扶工作总结
2014/11/26 职场文书
2014年仓库保管员工作总结
2014/12/03 职场文书
个人维稳承诺书
2015/05/04 职场文书
2015年工商所工作总结
2015/05/21 职场文书
《莫泊桑拜师》教学反思
2016/02/22 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
人生感悟经典句子
2019/08/20 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python
详解Vue router路由
2021/11/20 Vue.js