我有一个带有图像的python程序。该图像显示在程序创建的tkinter窗口中,并且是必需的。我想使用pyinstaller将.py文件和.gif文件合并为一个可执行文件。
我知道要创建一个独立的.py文件,您需要使用--onefile
,但我不知道如何处理涉及的图像。我相对确定您必须编辑.spec文件,但我不知道如何执行此操作。
我不在乎程序的图标,只是在tkinter窗口中的图像。
由于我是初学者,请提供分步说明。
答案 0 :(得分:1)
您也许可以对GIF文件进行base64编码,然后将其存储为Python脚本中的字符串-这样就无需携带多余的GIF文件了。
因此,假设您的图片位于名为image.gif
的文件中,则可以在终端机中执行以下操作:
base64 -i image.gif -o image.b64
然后复制文件image.b64
的(文本)内容并存储在Python变量中:
photo = """R0lGODlh4gLxAPcAAAQEBAoGBgo...L+SwTBVhBCtCVf6lAE"""
然后通过以下方式加载图像:
photo = PhotoImage(data=photo)
答案 1 :(得分:1)
经过大量实验,我得到了一个工作示例。这是一个小的示例脚本,用于加载图像并显示它-唯一棘手的部分是它决定是从捆绑软件中运行还是实时运行。
#!/usr/local/bin/python3
from PIL import Image
import sys, os
filename = "image.png"
# Work out where the image file is
if getattr( sys, 'frozen', False ) :
# running in a bundle
path = os.path.join(sys._MEIPASS, filename)
else :
# running live
path = filename
im = Image.open(path)
im.show()
然后我使用 PyInstaller 将其构建为单个文件,如下所示:
pyinstaller --add-data "image.png:." --onefile test.py
这将创建一个名为dist
的目录,您将在其中找到一个名为test
的文件,该文件可以在具有相同操作系统但未安装Python的其他计算机上运行。
答案 2 :(得分:0)
您需要将映像“附加”到程序。您可以这样操作:
-add-data“您要添加的文件。”
但是,在代码上,当引用图像文件时,您需要这样做:
image_file = sys._MEIPASS + "\file.gif"
为什么?由于该文件现在位于程序内部,并且用于指示该文件位于程序内部的目录为:sys._MEIPASS。