我想为我的.exe包含一个图像。我正在按照here列出的说明进行操作。它说构建在终端中成功完成。当我运行.exe时,它标志着程序中的致命错误。
任何想法表示赞赏。
我的目录如下
/Box Tracking
--/res
----amazon_box.jpg
--main.py
--gui.py
gui.py中的相关代码:
import tkinter as tk
import main
import traceback
import time
import random
# use these libs since base tkinter can only open gif and other obscure formats
# must install Pillow rather than PIL
from PIL import ImageTk, Image
from jokes import jokes
import sys, os # these will allow me to bundle the image in the distro
def resource_path(relative_path):
'''
See notes
:param relative_path: path I will use | string | 'res/amazon-box.jpg'
:return: string | path
'''
if hasattr(sys, '_MEIPASS'):
return os.path.join(sys._MEIPASS, relative_path)
return os.path.join(os.path.abspath("."), relative_path)
root = tk.Tk() # create GUI instance
root.geometry("1000x1000") # make GUI big so that users can see it
root.title('Box Tracking') # name GUI
# add a background so users can see it
bg_image = Image.open(resource_path('res/amazon-box.jpg'))
tk_bg_image = ImageTk.PhotoImage(bg_image)
bg = tk.Label(root,image=tk_bg_image)
bg.place(x=0,y=0,relwidth=1,relheight=1)
我用来构建.exe的代码段:
pyinstaller --onefile --windowed --add-data res/amazon-box.jpg;. --name "Box Tracking 3.1.5" gui.py
答案 0 :(得分:0)
也许有更好的方法,但是我这样做是这样的:
在\res\
目录中,我有amazon_box.py
和一个空的__init__.py
您可以使用小脚本将图像转换为base64,例如:
import base64
with open("amazon_box.jpg", "rb") as image:
b = base64.b64encode(image.read())
with open("amazon_box.py", "w") as write_file:
write_file.write("def photo(): return (" + str(b) + ")"
在amazon_box.py
中将具有(由以上脚本自动创建):
def photo(): return (image_as_base64)
此后,可以在PhotoImage(data = )
的主脚本中使用该图像:
import tkinter as tk
from res import amazon_box
root = tk.Tk() # create GUI instance
root.geometry("1000x1000") # make GUI big so that users can see it
root.title('Box Tracking') # name GUI
# add a background so users can see it
tk_bg_image = tk.PhotoImage(data = amazon_box.photo())
bg = tk.Label(root,image=tk_bg_image)
bg.place(x=0,y=0,relwidth=1,relheight=1)
很显然,我还没有使用您的图像对其进行测试,但这是我过去将图像包装到一个文件中的方式,并且您可以在一个.py
文件中包含多个图像,因此实际上可以一个非常干净的最终结果。
编辑:
由于此时它只是PyInstaller的另一个模块,所以我的构建命令是标准的:pyinstaller.exe --windowed --onefile "path\to\main\py\file"
我通常只是在命令提示符下运行PyInstaller。