Pyinstaller 打包 Tkinter 程序时引入图标解决方法
2016-05-06 10:29
615 查看
Pyinstaller 打包 Tkinter 程序时引入图标解决方法
描述
在windows下开发python的gui程序时,多数使用pyinstaller, py2exe等打包工具.在因为tkinter框架时,代码中使用iconbitmap引入程序框的图标样式,直接运行时没有问题,
但是在pyinstaller打包后会出现无法找到ico文件问题.
网上参考了几个解决方法都过于复杂(img2py, 或者修改spec打包参数)
下面我为大家带来一个非常方便可行的办法.
解决方法
项目有两个文件分别是tk程序和图标文件hello.py icon.ico
hello.py源码用例
from Tkinter import * root = Tk() root.iconbitmap("icon.ico") Label(root, text="hello world").pack() root.mainloop()
运行后是一个简易的tk程序,左上角图标变为自定义的
icon.ico文件
为了适配pyinstaller能把icon文件引入,我们修改成程序,把
icon.ico修改为
icon.py
这个是
img2py带给我的启发
当前目录下进入python shell,敲入以下命令
1.以二进制方式打开
icon.ico
2.进行base64编码转换
3.以变量形式保存在
icon.py中
import base64 open_icon = open("icon.ico","wb+") b64str = base64.b64encode(open_icon.read()) open_icon.close() write_data = "img = '%s'" % b64str f = open("icon.py","w+") f.write(wrte_data)
这里可以当前目录下出现了
icon.py文件,里面只有一行就是
img变量等于一串
base64编码
hello.py icon.ico
icon.py
修改 hello.py源码,导入
icon.py中的
img, 创建一个临时的
tmp.ico文件作为图标引入后删除即可
from Tkinter import * import base64 from icon import img root = Tk() tmp = open("tmp.ico","wb+") tmp.write(base64.b64decode(img)) tmp.close() root.iconbitmap("tmp.ico") os.remove("tmp.ico") Label(root, text="hello world").pack() root.mainloop()
最后就是pyinstaller打包
pyinstaller -i icon.ico -w -F hello.py
相关文章推荐
- linux cat命令详解
- CBCharacteristic-CBMutableCharacteristic学习笔记
- Objective-C的属性和成员变量用法及关系浅析
- LeetCode 25. Reverse Nodes in k-Group
- 在火狐下无法获取select设置display:none后的选中的值
- window.parent ,window.top,window.self 详解
- MFC Cbutton添加文本,获取文本
- C++ 类的静态成员详细讲解
- oracle 修改表名几种方法
- 曲率滤波的理论基础和应用
- oracle 多表联合查询总结归纳
- IOS开发-自动布局Autoresizing和Autolayout
- 设计模式C++学习笔记之六(Facade门面模式)
- 基于接口开发的令牌
- [一起学Hive]之一–Hive概述,Hive是什么
- 是时候来了解一波Retrofit2了。
- Leetcode no. 34
- CBATTRequest 学习笔记
- CBPeripheralManager
- c++第一次实验