Qt 资源系统(Qt Resource System)是在应用程序里存储二进制文件的一种机制。

文件可以被嵌入到应用程序中,通过 QFile 类,和使用以 :/ 开头的文件名表示的 QIconQPixmap 类来访问。

Qt 资源系统经常用来存储图片、图标、字体等各种第三方资源。这篇教程里我们将学习怎么载入自己的图片来作为按钮图标。

为了方便学习,我们来尝试修改 Qt 例程里的多媒体播放器。它的界面如下,多媒体的控制(播放、暂停、停止等)是用 QPushButton 组件完成的,使用的都是默认图标。

你可以通过设计图标来让你的程序更有吸引力,但是既然你不想自己设计它们,就是用下面这套图标吧。(这能有吸引力?)

你可以通过 Qt 资源系统(Qt Resource System)网站查询更多 rcc 命令、.qrc 文件格式、资源系统等信息。

.qrc 文件

在运行命令之前,要先把资源添加到 .qrc 文件中。下面的例子展示了 icons.qrc 文件中列出的资源。

</ui>
<!DOCTYPE RCC><RCC version="1.0">
<qresource><file>icons/play.png</file><file>icons/pause.png</file><file>icons/stop.png</file><file>icons/previous.png</file><file>icons/forward.png</file>
</qresource>
</RCC>

生成 Python 文件

完成 icons.qrc 文件后,使用 pyside6-rcc 工具来生成包含所有资源二进制信息的 Python 类。运行下面命令:

pyside6-rcc icons.qrc -o rc_icons.py

这里,-o 选项用来指明你的输出文件名,即 rc_icons.py

在你的 Python 主文件里引用生成的类:

import rc_icons

修改例程

因为你是在修改一个现有的例程,你需要修改下面这几行代码:

from PySide6.QtGui import QIcon, QKeySequence
playIcon = self.style().standardIcon(QStyle.SP_MediaPlay)
previousIcon = self.style().standardIcon(QStyle.SP_MediaSkipBackward)
pauseIcon = self.style().standardIcon(QStyle.SP_MediaPause)
nextIcon = self.style().standardIcon(QStyle.SP_MediaSkipForward)
stopIcon = self.style().standardIcon(QStyle.SP_MediaStop)

将它们替换成如下代码:

from PySide6.QtGui import QIcon, QKeySequence, QPixmap
playIcon = QIcon(QPixmap(":/icons/play.png"))
previousIcon = QIcon(QPixmap(":/icons/previous.png"))
pauseIcon = QIcon(QPixmap(":/icons/pause.png"))
nextIcon = QIcon(QPixmap(":/icons/forward.png"))
stopIcon = QIcon(QPixmap(":/icons/stop.png"))

要保证成功替换图标,还需要在以下两处修改代码。

在你的引用后面加入

import rc_icons

然后,将类的构造函数修改成这样:

def __init__(self):super(MainWindow, self).__init__()self.playlist = QMediaPlaylist()self.player = QMediaPlayer()toolBar = QToolBar()self.addToolBar(toolBar)fileMenu = self.menuBar().addMenu("&File")openAction = QAction(QIcon.fromTheme("document-open"),"&Open...", self, shortcut=QKeySequence.Open,triggered=self.open)fileMenu.addAction(openAction)exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit",self, shortcut="Ctrl+Q", triggered=self.close)fileMenu.addAction(exitAction)playMenu = self.menuBar().addMenu("&Play")playIcon = QIcon(QPixmap(":/icons/play.png"))self.playAction = toolBar.addAction(playIcon, "Play")self.playAction.triggered.connect(self.player.play)playMenu.addAction(self.playAction)previousIcon = QIcon(QPixmap(":/icons/previous.png"))self.previousAction = toolBar.addAction(previousIcon, "Previous")self.previousAction.triggered.connect(self.previousClicked)playMenu.addAction(self.previousAction)pauseIcon = QIcon(QPixmap(":/icons/pause.png"))self.pauseAction = toolBar.addAction(pauseIcon, "Pause")self.pauseAction.triggered.connect(self.player.pause)playMenu.addAction(self.pauseAction)nextIcon = QIcon(QPixmap(":/icons/forward.png"))self.nextAction = toolBar.addAction(nextIcon, "Next")self.nextAction.triggered.connect(self.playlist.next)playMenu.addAction(self.nextAction)stopIcon = QIcon(QPixmap(":/icons/stop.png"))self.stopAction = toolBar.addAction(stopIcon, "Stop")self.stopAction.triggered.connect(self.player.stop)playMenu.addAction(self.stopAction)# many lines were omitted

运行例程

运行结果如下:


更多关于 Qt for Python 文章,可以查看 PySide6 官方教程 专栏。

【Qt for Python官方教程】使用pyside6-rcc引入.qrc文件相关推荐

  1. Python官方教程.pdf

    人生苦短,快学Python! 之前总有人询问有没有Python的学习资料? 这次废了九牛二虎之力,为大家找到了几个最适合小白的Python的学习资料!容易入门,又全面,太好用了. 1. Python官 ...

  2. python官网 中文版-python .. 官方教程中文版.pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython python .. 官方教程中文版.pdf105页 ...

  3. PYTHON官方教程:Python3.11中文版文档

    Python 每年都会发布新版本,上半年是功能锁定的测试版,年底是最终版本. Python 3.11 的特性集刚刚定稿,测试版本已经发布,开发人员在非生产代码上可以尝试使用这个最新版本,验证它能否在你 ...

  4. Caffe for Python 官方教程

    导言 本教程中,我们将会利用Caffe官方提供的深度模型--CaffeNet(该模型是基于Krizhevsky等人的模型的)来演示图像识别与分类.我们将分别用CPU和GPU来进行演示,并对比其性能.然 ...

  5. Opencv4 -Python官方教程学习笔记33---BRIEF

    理论 我们知道SIFT使用128维矢量作为描述符.由于它使用浮点数,因此基本上需要512个字节.同样,SURF最少也需要256个字节(用于64像素).为数千个功能部件创建这样的向量会占用大量内存,这对 ...

  6. revit打开服务器文件,Revit官方教程丨链接及打开IFC文件

    链接 IFC 文件要使用 IFC 模型作为其他设计工作的参照,请将 IFC 文件链接到 Revit 模型.[*](可选)在链接 IFC 文件前,请单击"文件"选项卡 打开 (IFC ...

  7. python modbus类封装_Python 中引入一个文件,模块的概念

    Python 提供了强大的模块支持,主要体现在,不仅 Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块. 通过这些强大的模块可以极大地提高开 ...

  8. python入门教程 官方-Python自学入门?

    如果你是零基础入门 Python 的话,建议初学者至少达到两个目标: 会用,理解. 会用 通过 Python 入门教程,学习 Python 的语法,熟悉 Python 标准库的使用. 目前 Pytho ...

  9. Python 官方中文教程(简)

    Python 官方教程 前言 这是一次系统学习Python官方教程的学习笔记 整个教程一共16章, 在学习过程中记录自己不知道的和一些重要的知识, 水平有限, 请指正. Python3.7 官方教程. ...

  10. python官方中文文档上线_微软官方上线Python教程

    Windows 上做 Python 开发太痛苦?近日,微软上线了一系列Python官方教程<Develop with Python on Windows>,文档内容包括设置Python开发 ...

最新文章

  1. `MediaDevices.getUserMedia` `undefined` 的问题
  2. 编写你自己的单点登录(SSO)服务(转)
  3. Activity之launchMode:singleTop,singleTask与singleInstance
  4. 他解决了物理学千年争端,成就肩比牛顿、爱因斯坦,但却鲜有人知......
  5. python程序实例讲解_Python编程之属性和方法实例详解
  6. PHP 危矣?Zend Engine 团队宣布脱离 Rogue Wave
  7. CSS3制作3D水晶糖果按钮
  8. 关于Cocos2d-x中实例伸缩后的位置设置
  9. PHP基础知识------页面静态化
  10. piap.excel 微软 时间戳转换mssql sql server文件时间戳转换unix 导入mysql
  11. mysql 事务 实现_什么是mysql的事务和实现
  12. 汽车车牌JS正则表达式验证(含新能源车牌)
  13. 【AR开发】ARCore官方示例(Android)
  14. 利用python打乱xlsx表格
  15. 荣耀手机怎么使用鸿蒙系统,荣耀供应链6月全面恢复,安卓系统依然是第一选择,鸿蒙只是备选...
  16. 电脑其实很好玩,玩好了其实很无耻(转自校内)
  17. 从15亿到5000亿 eBay收购PayPal成硅谷传奇
  18. C语言循环计算输出圆周长
  19. Java 报错: Cannot deserialize instance of `com.ruoyi.web.entity.xxxEntity` out of START_ARRAY toke
  20. 2D弹簧质点系统的隐式求解

热门文章

  1. CATIA 视角操作
  2. 声艺fx16调音台怎么样_声艺FX16II 声艺(Soundcraft) FX16ii 调音台
  3. sublime如何运行HTML?
  4. C++11 字符串编码转换
  5. 亚马逊 速卖通 Lazada 敦煌网测评自养号技巧知识
  6. 计算机质量检测技术,计算机技术在建材质量检测中的应用分析
  7. QT制作一个串口调试助手出现乱码问题
  8. Docker 下载安装使用(简单教程)
  9. html5字体代码列表,html5——web字体(示例代码)
  10. php json转数组示例,php json转数组的例子