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