pyqt 加载资源文件
对于pyqt,一般来说,UI界面设计通常是使用qtdesigner来直接拖拽布局,当然也可以直接用代码来布局内容
但是在布局界面和代码都设计完成需要打包生成exe文件的时候,一般会遇到资源文件不能打包。
这里展示一些加载资源文件的方法
1.将资源文件转化qcr文件
建立qrc文件,在里面保存资源文件的位置:
resource.qrc
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
<file alias="images/pic.png">images/pic.png</file>
<file alias="images/search.png">images/search.png</file>
</qresource>
</RCC>
然后将资源文件转换为py文件
pyrcc4 -o resource.py resource.qrc
最后我们就能在代码中引用这些资源文件了
import resource
# 在程序中使用
icon = QIcon(':/icons/add.png')
通过下面的代码可以一键转化
# -*- coding: utf-8 -*-
# @Date : 2018-12-14 14:02:35
# @Author : Jimy_Fengqi (jmps515@163.com)
# @Link : https://blog.csdn.net/qiqiyingse
# @Version : V1.0
# @pyVersion: 3.6
import subprocess, os
images = os.listdir('./images')
qss = os.listdir('./qss')
f = open('resource.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'pyrcc4 -o resource.py resource.qrc', stdout = subprocess.PIPE, stdin = subprocess.PIPE, stderr = subprocess.PIPE, creationflags=0x08)
2.将资源文通过base64编码保存在文件
import base64
def pictopy(picture_name):
"""
将图像文件转换为py文件
:param picture_name:
:return:
"""
open_pic = open("%s" % picture_name, 'rb')
b64str = base64.b64encode(open_pic.read())
open_pic.close()
# 注意这边b64str一定要加上.decode()
write_data = 'img = "%s"' % b64str.decode()
f = open('%s.py' % picture_name.replace('.', '_'), 'w+')
f.write(write_data)
f.close()
if __name__ == '__main__':
pics = ["one.png", "two.png", "com.png", "socket.png", "win.png"]
for i in pics:
pictopy(i)
print("ok")
在程序中使用:
from pic1_png import img as pic1
...
tmp = open('pic1.png', 'wb')
tmp.write(base64.b64decode(socket))
tmp.close()
#现在就能用了,用完(加载到程序里之后)删了就好
os.remove(‘pic1.png’)
两种方法的比较
两种方法都是在转换完之后可以把原有的资源文件丢弃掉了
但是第二种方法呢,在程序运行的时候,还需要重新生成临时变量,感觉有点浪费资源
目前不太清楚第一种方法是不是同样的思路,待以后观察吧。