PyQt5使用pyinstaller打包时图标资源无法打包的解决方法详细版
原文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有点大)
- 点赞
- 收藏
- 分享
- 文章举报
- 计算机无法访问,您可能没有权限使用网络资源的解决方法
- 关于使用pyinstaller 打包带有matplotlib 等出现UnicodeDecodeError解决方法
- 使用pyinstaller打包,subprocess报“句柄无效”错误的解决方法
- 无法访问,您可能没有权限使用网络资源的解决方法
- win7下计划任务schtasks使用详解及"错误:无法加载列资源"的解决方法1
- 关于使用pyinstaller 打包带有matplotlib 等出现UnicodeDecodeError解决方法
- 使用pyinstaller打包PyQt4程序遇到的问题及解决方法
- 针对于win8、win10无法访问,您可能没有权限使用网络资源的解决方法
- 工作组无法访问 没有权限使用网络资源(解决方法)
- [转帖]win7下计划任务schtasks使用详解及"错误:无法加载列资源"的解决方法
- [转] "计算机无法访问,您可能没有权限使用网络资源.请与这台服务器的管理员联系以查明您是否有访问权限" 解决方法
- Pyinstaller 打包 Tkinter 程序时引入图标解决方法
- Android混淆打包后openFileChooser无法使用找不到的解决方法
- 关于“计算机无法访问,您可能没有权限使用网络资源....”的解决方法
- pyinstaller 打包py脚本(使用word cloud 和jieba分词遇到的问题)成exe 并且设置计划任务在windowsserver云服务器自动运行的问题和解决方法
- tinker调用pyqt5设计UI的方法解决图片,音频等资源打包成exe问题(在窗口内部显示图片,调用音频等,win7 64位可能不适用)
- PyQt5系列教程(十二)pyinstaller打包exe时subprocess无效的解决方法
- pyinstaller打包单个exe后无法执行错误的解决方法
- 解决java工程打包后无法找到资源文件路径的方法