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之大话题小函数(1)
Oct 10 Python
Python实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python中的高级函数map/reduce使用实例
Apr 13 Python
Python并发:多线程与多进程的详解
Jan 24 Python
Python如何爬取实时变化的WebSocket数据的方法
Mar 09 Python
python支持多线程的爬虫实例
Dec 21 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
Jan 14 Python
开启Django博客的RSS功能的实现方法
Feb 17 Python
Python3 利用face_recognition实现人脸识别的方法
Mar 13 Python
python实现密码验证合格程序的思路详解
Jun 01 Python
使用python求斐波那契数列中第n个数的值示例代码
Jul 26 Python
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
Aug 14 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中var_dump,var_export,print_r三个函数的区别
2013/06/21 PHP
PHP截断标题且兼容utf8和gb2312编码
2013/09/22 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
php+mysql实现用户注册登陆的方法
2015/01/03 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
js遍历、动态的添加数据的小例子
2013/06/22 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
Vue实现浏览器打印功能的代码
2020/04/17 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
使用Python的内建模块collections的教程
2015/04/28 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Django使用paginator插件实现翻页功能的实例
2018/10/24 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
css3进行截取替代js的substring
2013/09/02 HTML / CSS
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
贝玲妃英国官网:Benefit英国
2018/02/03 全球购物
KIKO MILANO俄罗斯官网:意大利领先的化妆品和护肤品品牌
2021/01/09 全球购物
Ibatis中如何提高SQL Map的性能
2013/05/11 面试题
北大青鸟学生求职信
2013/09/24 职场文书
入学生会自荐书范文
2014/02/05 职场文书
好的促销活动方案
2014/08/21 职场文书
劳模事迹材料范文
2014/12/24 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
《纸船和风筝》教学反思
2016/02/18 职场文书
AJAX学习笔记
2021/05/18 Javascript
使用CSS设置滚动条样式
2022/01/18 HTML / CSS