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中查看文件名和文件路径
Mar 31 Python
Python基于scapy实现修改IP发送请求的方法示例
Jul 08 Python
浅谈python函数之作用域(python3.5)
Oct 27 Python
Python字符串拼接六种方法介绍
Dec 18 Python
python微信跳一跳游戏辅助代码解析
Jan 29 Python
Python音频操作工具PyAudio上手教程详解
Jun 26 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
Python 正则表达式爬虫使用案例解析
Sep 23 Python
python创建n行m列数组示例
Dec 02 Python
python pycharm最新版本激活码(永久有效)附python安装教程
Sep 18 Python
python 调用Google翻译接口的方法
Dec 09 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根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
解决PHP里大量数据循环时内存耗尽的方法
2015/10/10 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
jQuery插件开发详细教程
2014/06/06 Javascript
BOOTSTRAP时间控件显示在模态框下面的bug修复
2015/02/05 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
精彩的Bootstrap案例分享 重点在注释!(选项卡、栅格布局)
2016/07/01 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
微信小程序scroll-view实现横向滚动和上拉加载示例
2017/03/06 Javascript
Vuex利用state保存新闻数据实例
2017/06/28 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
详解jquery和vue对比
2019/04/16 jQuery
ES6常用小技巧总结【去重、交换、合并、反转、迭代、计算等】
2019/12/21 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
[00:31]DOTA2荣耀之路7:Miracle-空血无敌斩
2018/05/31 DOTA
python中sleep函数用法实例分析
2015/04/29 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
python魔法方法-自定义序列详解
2016/07/21 Python
tensorflow实现KNN识别MNIST
2018/03/12 Python
Python日期时间Time模块实例详解
2019/04/15 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python enumerate内置函数用法总结
2020/01/07 Python
基于Tensorflow使用CPU而不用GPU问题的解决
2020/02/07 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
Skip Hop官网:好莱坞宝宝挚爱品牌
2018/06/17 全球购物
Shein英国:女性时尚网上商店
2019/04/10 全球购物
国际政治个人自荐信范文
2013/11/26 职场文书
实习教师自我鉴定
2013/12/12 职场文书
股份转让协议书
2014/04/12 职场文书
应用外语系自荐信
2014/06/26 职场文书
2015年乡镇工会工作总结
2015/05/19 职场文书