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实现代理服务功能实例
Nov 15 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 Python
Python变量赋值的秘密分享
Apr 03 Python
解决python3.5 正常安装 却不能直接使用Tkinter包的问题
Feb 22 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
python的pyecharts绘制各种图表详细(附代码)
Nov 11 Python
Python如何实现在字符串里嵌入双引号或者单引号
Mar 02 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
Python 如何反方向迭代一个序列
Jul 28 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 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 时间转换Unix时间戳代码
2010/01/22 PHP
如何用C语言编写PHP扩展的详解
2013/06/13 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
JavaScript中的Promise使用详解
2015/06/24 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
莱鸟介绍javascript onclick事件
2016/01/06 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
2017/08/31 Javascript
React通过redux-persist持久化数据存储的方法示例
2019/02/14 Javascript
js中的深浅拷贝问题简析
2019/05/10 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[48:00]完美世界DOTA2联赛循环赛 Forest vs Inki BO2第二场 11.04
2020/11/04 DOTA
Python实现字符串逆序输出功能示例
2017/06/24 Python
python 字典的打印实现
2019/09/26 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
天猫国际进口超市直营:官方直采,一站购齐
2017/12/11 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
《美丽的公鸡》教学反思
2014/02/25 职场文书
会计专业导师推荐信
2014/03/08 职场文书
对祖国的寄语大全
2014/04/11 职场文书
公司采购主管岗位职责
2014/06/17 职场文书
厨师长岗位职责范本
2014/08/25 职场文书
团党委领导干部党的群众路线教育实践活动个人对照检查材料思想汇
2014/10/05 职场文书
教师党员整改措施
2014/10/24 职场文书
小学生毕业评语
2014/12/26 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
运动会入场词
2015/07/18 职场文书
研讨会致辞
2015/07/31 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书