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中的CURL PycURL使用例子
Jun 01 Python
连接Python程序与MySQL的教程
Apr 29 Python
在Ubuntu系统下安装使用Python的GUI工具wxPython
Feb 18 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
Python中optparser库用法实例详解
Jan 26 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
Django的models中on_delete参数详解
Jul 16 Python
python按修改时间顺序排列文件的实例代码
Jul 25 Python
Django Admin中增加导出CSV功能过程解析
Sep 04 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
深入了解Python 变量作用域
Jul 24 Python
Python类成员继承重写的实现
Sep 16 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中json_encode()和json_decode()
2014/05/25 PHP
分享一段php获取linux服务器状态的代码
2014/05/27 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
CodeIgniter控制器之业务逻辑实例分析
2016/01/20 PHP
php版微信自定义回复功能示例
2016/12/05 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
php的RSA加密解密算法原理与用法分析
2020/01/23 PHP
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
GOJS+VUE实现流程图效果
2018/12/01 Javascript
js实现数字滚动特效
2019/12/16 Javascript
react结合bootstrap实现评论功能
2020/05/30 Javascript
python私有属性和方法实例分析
2015/01/15 Python
Python单例模式的两种实现方法
2017/08/14 Python
Python文件操作之合并文本文件内容示例代码
2017/09/19 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
使用python实现抓取腾讯视频所有电影的爬虫
2019/04/15 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
Python SQLAlchemy库的使用方法
2020/10/13 Python
如何编写python的daemon程序
2021/01/07 Python
CSS3实现曲线阴影和翘边阴影
2016/05/03 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处?
2012/03/14 面试题
企业车辆管理制度
2014/01/24 职场文书
解除合同协议书
2014/04/17 职场文书
供应链金融服务方案
2014/05/25 职场文书
小学课改工作总结
2015/08/13 职场文书
高中化学教学反思
2016/02/22 职场文书
Java练习之潜艇小游戏的实现
2022/03/16 Java/Android
《堡垒之夜》联动《刺客信条》 4月7日正式上线
2022/04/06 其他游戏