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编写一个最基础的代码解释器的要点解析
Jul 12 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
Apr 21 Python
python实现电脑自动关机
Jun 20 Python
python使用matplotlib库生成随机漫步图
Aug 27 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
python scrapy爬虫代码及填坑
Aug 12 Python
淘宝秒杀python脚本 扫码登录版
Sep 19 Python
python hash每次调用结果不同的原因
Nov 21 Python
Python使用内置函数setattr设置对象的属性值
Oct 16 Python
python网络爬虫实现发送短信验证码的方法
Feb 25 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
浅析Django接口版本控制
Jun 26 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
基于mysql的论坛(3)
2006/10/09 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
php中将时间差转换为字符串提示的实现代码
2011/08/08 PHP
三种php连接access数据库方法
2013/11/11 PHP
PHP数据库万能引擎类adodb配置使用以及实例集锦
2014/06/12 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
2011/07/04 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
使图片旋转的3种解决方案
2013/11/21 Javascript
JS小功能(列表页面隔行变色)简单实现
2013/11/28 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
js 通过cookie实现刷新不变化树形菜单
2014/10/30 Javascript
Javascript中数组sort和reverse用法分析
2014/12/30 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
jquery实现的用户注册表单提示操作效果代码分享
2015/08/28 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
AngularJS日期格式化常见操作实例分析
2018/05/17 Javascript
jQuery滑动效果实现方法分析
2018/09/05 jQuery
js/jQuery实现全选效果
2019/06/17 jQuery
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
2021/01/08 Vue.js
Python实现的彩票机选器实例
2015/06/17 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
python3实现全角和半角字符转换的方法示例
2017/09/21 Python
Python重新加载模块的实现方法
2018/10/16 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
html5 桌面提醒:Notifycations应用介绍
2012/11/27 HTML / CSS
教师实习自我鉴定
2013/12/14 职场文书
实习班主任自我评价
2015/03/11 职场文书
员工安全责任协议书
2016/03/22 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏