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中的测试模块unittest和doctest的使用教程
Apr 14 Python
Python中的元类编程入门指引
Apr 15 Python
python中as用法实例分析
Apr 30 Python
Python中的random.uniform()函数教程与实例解析
Mar 02 Python
python调用外部程序的实操步骤
Mar 04 Python
如何利用Anaconda配置简单的Python环境
Jun 24 Python
对Python3中列表乘以某一个数的示例详解
Jul 20 Python
关于Python3爬虫利器Appium的安装步骤
Jul 29 Python
基于python实现简单C/S模式代码实例
Sep 14 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
Scrapy实现模拟登录的示例代码
Feb 21 Python
只需要这一行代码就能让python计算速度提高十倍
May 24 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
非洲第一个咖啡超凡杯大赛承办国—卢旺达的咖啡怎么样
2021/03/03 咖啡文化
使用PHP维护文件系统
2006/10/09 PHP
模仿OSO的论坛(二)
2006/10/09 PHP
php制作中间带自己定义图片二维码的方法
2014/01/27 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
在laravel中使用with实现动态添加where条件
2019/10/10 PHP
js查找父节点的简单方法
2008/06/28 Javascript
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
JavaScript面向对象编写购物车功能
2016/08/19 Javascript
jQuery实现的网页换肤效果示例
2016/09/20 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
JavaScript中数组Array方法详解
2017/02/27 Javascript
AngularJS ionic手势事件的使用总结
2017/08/09 Javascript
Vue-路由导航菜单栏的高亮设置方法
2018/03/17 Javascript
通过jquery的ajax请求本地的json文件方法
2018/08/08 jQuery
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
[01:56]无止竞 再出发——中国军团出征2017年DOTA2国际邀请赛
2017/07/05 DOTA
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
Python存取XML的常见方法实例分析
2017/03/21 Python
python连接数据库的方法
2017/10/19 Python
Python变量类型知识点总结
2019/02/18 Python
Python中调用其他程序的方式详解
2019/08/06 Python
Python数据正态性检验实现过程
2020/04/18 Python
Python实现aes加密解密多种方法解析
2020/05/15 Python
逼真的HTML5树叶飘落动画
2016/03/01 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
大学生未来职业生涯规划书
2014/02/15 职场文书
三年级学生期末评语
2014/12/26 职场文书
oracle数据库去除重复数据
2022/05/20 Oracle
MySQL中dd::columns表结构转table过程及应用详解
2022/09/23 MySQL