您的位置:首页 > 编程语言 > Qt开发

PyQt5使用pyinstaller打包时图标资源无法打包的解决方法详细版

2020-01-12 11:05 681 查看

原文https://blog.csdn.net/weixin_42296333/article/details/81178915

原文我比较难懂,可能是我理解能力不行,多次实验终于成功

本文尽量以精简容易理解的方式讲解
并附上实际所有需要的文件提供测试

正文

1,图标格式最好是ico格式,否则很大可能不显示
2,过程及其它注意事项:
新建文本文档写入如下内容:

<RCC>
<qresource prefix="/">
<file>图片文件名.后缀ico</file>
#多少个文件写多少行
</qresource>
</RCC>```

注意图片文件后缀最好是ico否则可能不显示
可以在
https://www.easyicon.net/下载ico图标
“#多少个文件写多少行”这句话最好删除,因为有中文
还有文件名一定要是纯英文,为了防止后面import时出现麻烦
将写好的文件另存为全部类型
名字不能有数字
后缀是.qrc
在qrc文件所在的目录的空白处(按住shift)右键,打开命令行
输入
pyrcc5 -o 目标文件名 源文件名
我们要把qrc转换成py文件
所以这样输(假设qrc文件是a.qrc)
pyrcc5 -o a.py a.qrc
或者
pyrcc5 -o b.py a.qrc
对py命名只要不含数字就好
否则在import的时候会报错
此时会在目录下生成.py文件(假设是b.py)
打开IDLE
新建文件
输入以下代码测试是否成功

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
import b
class Example(QWidget):
def __init__(self):
super().__init__()
self.iniUI()
def iniUI(self):
self.setGeometry(300,300,300,300)
self.setWindowTitle("Icon")
self.setWindowIcon(QIcon(":/b.ico"))self.show()
if __name__ =="__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

由于在这一行

self.setWindowIcon(QIcon(":/b.ico"))

调用了b.py中的资源
运行后,如果发现窗口左上角出现你的ico图片
则表示成功了
为了验证说明图片不是从目录读取
而是来自b.py的
可以把图片删除,再试试运行程序
发现图片仍然正常显示
如图,说明它已经脱离了图片

但是此时它仍然依赖于另一个文件b.py
只要删除,移动,更改了b.py文件或其内容
就会对它造成影响
最后用pyinstaller打包
彻底消去它对所有外部文件的依赖
注意:打包时使用的图标一定是32*32的ico格式
打包使用的图标n.ico一定要与主程序t.py在同一目录
输入pyinstaller -F -w t.py -i n.ico
回车,dist下已经有我们的exe文件

它已经可以脱离所有以前的依赖:

.py格式时依赖python环境,第三方库,以及需要的图片资源
.py格式,但是在进行以下步骤后:
将图片信息写入txt文档
另存为qrc文件
转化为py文件
将py文件import进入主程序
(注意,比如有个文件时d.py,则c.py调用它的条件时:
d.py和c.py在同样的目录下
且c.py中有import d这行
(注意不是import d.py)

独自运行了

最后强调:
所有图片文件最好时ico格式的,其它格式不知道会有什么问题
原作者还用了png格式,但是我实验了下
png显示不出来(可能是我的png有点大)

  • 点赞
  • 收藏
  • 分享
  • 文章举报
其实你很好 发布了12 篇原创文章 · 获赞 1 · 访问量 871 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐