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脚本关闭文件操作的机制
Jun 28 Python
如何处理Python3.4 使用pymssql 乱码问题
Jan 08 Python
python数据类型_元组、字典常用操作方法(介绍)
May 30 Python
基于python爬虫数据处理(详解)
Jun 10 Python
python3利用Dlib19.7实现人脸68个特征点标定
Feb 26 Python
用python与文件进行交互的方法
Mar 01 Python
python基础教程项目四之新闻聚合
Apr 02 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
python爬虫豆瓣网的模拟登录实现
Aug 21 Python
python re模块匹配贪婪和非贪婪模式详解
Feb 11 Python
使用Bazel编译TensorBoard教程
Feb 15 Python
python手写均值滤波
Feb 19 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获得文件扩展名三法
2006/11/25 PHP
PHP 文件缓存的性能测试
2010/04/25 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
php 在线导入mysql大数据程序
2015/06/11 PHP
php封装好的人民币数值转中文大写类
2015/12/20 PHP
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
实例分析10个PHP常见安全问题
2019/07/09 PHP
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
50 个 jQuery 插件可将你的网站带到另外一个高度
2016/04/26 Javascript
纯js实现悬浮按钮组件
2016/12/17 Javascript
Jquery实时监听input value的实例
2017/01/26 Javascript
100行代码理解和分析vue2.0响应式架构
2017/03/09 Javascript
jQuery实现文件编码成base64并通过AJAX上传的方法
2018/04/12 jQuery
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
TensorFlow实现iris数据集线性回归
2018/09/07 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
基于python 微信小程序之获取已存在模板消息列表
2019/08/05 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
Python3操作MongoDB增册改查等方法详解
2020/02/10 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
2020/07/14 Python
python实现控制台输出颜色
2021/03/02 Python
PHP如何自定义函数
2016/09/16 面试题
办公室文员工作自我评价
2013/12/01 职场文书
电子装配专业毕业生求职信
2014/04/23 职场文书
委托书怎样写
2014/08/30 职场文书
质量主管工作职责
2014/09/26 职场文书
评职称个人总结
2015/03/05 职场文书
雷锋之歌观后感
2015/06/10 职场文书
话题作文之成长
2019/12/09 职场文书
解决Tkinter中button按钮未按却主动执行command函数的问题
2021/05/23 Python