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聊天室实例程序分享
Jan 05 Python
Python用Bottle轻量级框架进行Web开发
Jun 08 Python
Python实现列表删除重复元素的三种常用方法分析
Nov 24 Python
Python使用re模块正则提取字符串中括号内的内容示例
Jun 01 Python
Python读取excel中的图片完美解决方法
Jul 27 Python
Windows下安装Scrapy
Oct 17 Python
ipython和python区别详解
Jun 26 Python
Python及Pycharm安装方法图文教程
Aug 05 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
python实现最短路径的实例方法
Jul 19 Python
python 基于UDP协议套接字通信的实现
Jan 22 Python
Python os和os.path模块详情
Apr 02 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求两个文件的相对路径
2013/06/20 PHP
使用PHP生成二维码的两种方法(带logo图像)
2014/03/14 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
php使用curl并发减少后端访问时间的方法分析
2016/05/12 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
js常用代码段收集
2011/10/28 Javascript
Js 时间间隔计算的函数(间隔天数)
2011/11/15 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
js replace 与replaceall实例用法详解
2013/08/03 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
JS控件bootstrap datepicker使用方法详解
2017/03/25 Javascript
浅谈vue引入css,less遇到的坑和解决方法
2018/01/20 Javascript
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
Python文本处理之按行处理大文件的方法
2018/04/09 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
Python创建数字列表的示例
2019/11/28 Python
Django-rest-framework中过滤器的定制实例
2020/04/01 Python
Python爬虫爬取百度搜索内容代码实例
2020/06/05 Python
英国领先的男士服装和时尚零售商:Burton
2017/01/09 全球购物
轻松制作精彩视频:Animoto
2018/09/19 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
简述synchronized和java.util.concurrent.locks.Lock的异同
2014/12/08 面试题
为什么要有struct关键字
2012/05/08 面试题
应届毕业生求职信范文
2013/12/18 职场文书
员工晚婚的请假条
2014/02/08 职场文书
党支部承诺书
2015/01/20 职场文书
向女朋友道歉的话
2015/01/20 职场文书
苦儿流浪记读书笔记
2015/07/01 职场文书
家长必看:义务教育,不得以面试 评测等名义选拔学生
2019/07/09 职场文书