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代码真的很爽
Aug 26 Python
python生成IP段的方法
Jul 07 Python
Python实现对字符串的加密解密方法示例
Apr 29 Python
Python字符串格式化的方法(两种)
Sep 19 Python
pandas 按照特定顺序输出的实现代码
Jul 10 Python
Django添加sitemap的方法示例
Aug 06 Python
python爬虫获取新浪新闻教学
Dec 23 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
详解Python可视化神器Yellowbrick使用
Nov 11 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
Python批量获取并保存手机号归属地和运营商的示例
Oct 09 Python
Django实现在线无水印抖音视频下载(附源码及地址)
May 06 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
2018/01/15 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
js以对象为索引的关联数组
2010/07/04 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
2012/12/10 Javascript
javascript中定义私有方法说明(private method)
2014/01/27 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
javascript 闭包详解及简单实例应用
2016/12/31 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
2019/01/06 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python中urllib模块用法实例详解
2014/11/19 Python
python实现文本文件合并
2015/12/29 Python
python之文件读取一行一行的方法
2018/07/12 Python
python 函数内部修改外部变量的方法
2018/12/18 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python使用matplotlib绘制雷达图
2019/10/18 Python
Python包,__init__.py功能与用法分析
2020/01/07 Python
Python多线程thread及模块使用实例
2020/04/28 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
美国翻新电子产品商店:The Store
2019/10/08 全球购物
公共汽车、火车和飞机票的通用在线预订和销售平台:INFOBUS
2019/11/30 全球购物
入党自我鉴定范文
2013/10/04 职场文书
大学生创业计划书的范文
2014/01/07 职场文书
社团招新策划书
2014/02/04 职场文书
化工专业求职信
2014/07/01 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
2014年客房部工作总结
2014/11/22 职场文书
sass 常用备忘案例详解
2021/09/15 HTML / CSS
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫