[PyQt] - 使用.qrc生成资源文件供Python使用

本文详细介绍如何使用qrc文件管理PyQt项目的UI资源,并通过pyrcc5命令转换为py文件,便于项目打包。同时,提供了一种利用Python脚本自动生成py资源文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PyQt开发过程中,在封装到exe文件时,UI资源文件需要再拷贝一份到dist路径下,实在不方便,遂采用使用qrc文件管理资源文件,并利用pyrcc5命令将qrc文件转为py文件,供Python使用。

什么是qrc文件?

qrc文件是XML格式的资源配置文件,记录了硬盘上的文件和对应的资源名称。
qrc文件的格式如下:

<RCC>
	<qresource>
		<file alias = 'xx.jpg'>images/xx.jpg</file>
		<file>help/help.html</file>
	</qresource>
</RCC>

使用qrc生成UI资源文件

qrc文件是XML格式文件,因此可以采用记事本进行创建。
进入资源文件所在路径,新建images.qrc文件,写入所需资源文件,格式如下:

<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="images/0.jpg">images/0.jpg</file>
<file alias="images/1.jpg">images/1.jpg</file>
<file alias="images/2.jpg">images/2.jpg</file>
<file alias="qss/qss.qss">qss/qss.qss</file>
</qresource>
</RCC>

由于qrc文件中的路径为相对路径,因此,qrc 文件中包含的资源文件必须位于.qrc文件所在路径或其子路径下。

qrc文件转py文件

在DOS命令窗中键入pyrcc5 -o images.py images.qrc,将.qrc文件转成.py文件,以供python使用。
执行后,在路径下会生成images.py文件,利用import images导入该py文件即可使用。

import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
import images

class Main(QWidget):
    def __init__(self):
        super(Main, self).__init__()

        self.button = QPushButton(self)

        self.button.setGeometry(100, 100, 50, 50)
        # 在程序中使用资源文件(这时候不再需要images文件夹和qss文件夹了)
        # 使用qrc生成的py文件资源时,在原资源路径基础上加上冒号:
        self.button.setStyleSheet("QPushButton{border-image: url(:/images/0.jpg)}")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = Main()
    main.show()
    sys.exit(app.exec_())

利用pyinstaller -F -w main.py对上述代码生成exe文件,生成后的main.exe文件不需要依赖images文件夹即可显示正确的资源。

利用python脚本快速生成py资源文件

下面利用python脚本实现从当前路径下生成相应的py资源文件过程:

import subprocess, os

images = os.listdir('./images')
qss = os.listdir('./qss')
f = open('images.qrc', 'w+')
f.write(u'<!DOCTYPE RCC>\n<RCC version="1.0">\n<qresource>\n')

for item in images:
    f.write(u'<file alias="images/'+ item +'">images/'+ item +'</file>\n')

for item in qss:
    f.write(u'<file alias="qss/'+ item +'">qss/'+ item +'</file>\n')

f.write(u'</qresource>\n</RCC>')
f.close()

pipe = subprocess.Popen(r'pyrcc5 -o images.py images.qrc', stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.PIPE, creationflags=0x08)

链接:https://pan.baidu.com/s/11hrsyeSutDJMq4NohHA9Bw
提取码:an8u

### 将.qrc文件转换为.py文件用于PyQt6 为了使资源能够在PyQt6项目中被有效利用,可以采用`pyrcc6`工具来完成`.qrc`文件向`.py`文件的转换工作。此过程确保了所有图像和其他静态资源能够被打包进Python脚本内,在最终的应用程序执行时得以正常展示。 对于具体的命令行操作如下所示: ```bash pyrcc6 -o resources_rc.py resources.qrc ``` 上述指令中的`resources.qrc`代表待处理的资源文件名,而`resources_rc.py`则是期望生成的目标Python模块名称[^1]。 当涉及到具体应用层面时,假设有一个名为`icons.qrc`的资源文件,其内部包含了多个图标路径定义,则可通过下面的方式将其编译成适合导入至项目的Python源码形式: ```xml <RCC> <qresource prefix="/icons"> <file>save.png</file> <file>open.png</file> <file>upload.png</file> <file>platform_running_dynamic.png</file> <file>settings.png</file> <file>search.png</file> </qresource> </RCC> ``` 随后通过调用`pyrcc6`并指定输入输出参数实现转换目的。值得注意的是,如果环境中尚未安装`pyrcc6`,则需先行获取对应版本的工具支持[^4]。 一旦完成了从`.qrc`到`.py`的转变之后,在主应用程序或其他组件里就可以轻松访问这些预先嵌入式的图形素材了。例如,在界面初始化阶段加载特定图标的实例代码片段可能看起来像这样: ```python from PyQt6 import QtWidgets, QtGui import resources_rc # 假设这是由 .qrc 文件生成Python 模块 app = QtWidgets.QApplication([]) window = QtWidgets.QMainWindow() icon = QtGui.QIcon(':/icons/save.png') # 使用 :/prefix/filename 的方式引用 qrc 中定义的资源 window.setWindowIcon(icon) window.show() app.exec() ``` 这段示范展示了怎样借助于已编译好的资源文件来设定窗口的小图标,其中的关键在于使用`:/{prefix}/{filename}`这样的URL风格字符串去定位所需的媒体对象[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值