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中输出ASCII大文字、艺术字、字符字小技巧
Apr 28 Python
python实现DES加密解密方法实例详解
Jun 30 Python
python自动化脚本安装指定版本python环境详解
Sep 14 Python
python读取文本绘制动态速度曲线
Jun 21 Python
Python pymongo模块常用操作分析
Sep 01 Python
Django ManyToManyField 跨越中间表查询的方法
Dec 18 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
Python多进程multiprocessing、进程池用法实例分析
Mar 24 Python
Jupyter notebook如何修改平台字体
May 13 Python
记录模型训练时loss值的变化情况
Jun 16 Python
pandas DataFrame.shift()函数的具体使用
May 24 Python
Python实现生活常识解答机器人
Jun 28 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设计模式 Delegation(委托模式)
2011/06/26 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
php无限极分类实现方法分析
2019/07/04 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
捕获关闭窗口的脚本
2009/01/10 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
js动态改变select选择变更option的index值示例
2014/07/10 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
亲自动手实现vue日历控件
2019/06/26 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
vue实现评价星星功能
2020/06/30 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
实例Python处理XML文件的方法
2015/08/31 Python
python列表的常用操作方法小结
2016/05/21 Python
用Python写一段用户登录的程序代码
2018/04/22 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
2018/07/27 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
浅析python标准库中的glob
2020/03/13 Python
HTML5标签小集
2011/08/02 HTML / CSS
悬挂训练绳:TRX
2017/12/14 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
Final类有什么特点
2012/04/25 面试题
德尔福集团DELPHI的笔试题
2012/02/22 面试题
简历中个人自我评价范文
2013/12/26 职场文书
安全生产管理合理化建议书
2014/03/12 职场文书
组工干部对照检查材料
2014/08/25 职场文书
2014年学生会部门工作总结
2014/11/07 职场文书
活动总结书怎么写
2015/05/11 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis