你有没有尝试过这种方法:
假设你有这样的布局
main.py
resources.py
data/img1.png
在main.py:
import resources
import tkinter as tk
root = tk.Tk()
root.title("Test")
resources.load_images()
lbl = tk.Label(root, image=resources.IMG1)
lbl.place(relx=0.5, rely=0.5, anchor="c")
root.mainloop()
在resources.py:
import tkinter as tk
IMG1 = None
def load_images():
global IMG1
IMG1 = tk.PhotoImage("data\\img1.png")
这很好用,并且可以加载您的图像。
现在让我们让它在一个单独的 exe 文件中运行:
我们不需要更改main.py,因为它只是通过我们的resources.py 脚本加载资源。
我们可以使用这个脚本加载/保存我们的图像数据:
import base64
def load_data(filename):
with open(filename, mode="rb") as f:
return base64.b64encode(f.read())
print(str(load_data("data\\img1.png"), "utf-8"))
# R0lGOD ...
所以我们现在可以将其复制并粘贴到我们的resources.py 文件中,并将其更改为如下所示:
import tkinter as tk
# here's our copied base64 stuff:
img1_data = '''
R0lGODlhEAAQALMAAAAAAP//AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA\nAAAAACH5BAEAAAIALAAAAAAQABAAQAQ3UMgpAKC4hm13uJnWgR
TgceZJllw4pd2Xpagq0WfeYrD7\n2i5Yb+aJyVhFHAmnazE/z4tlSq0KIgA7\n
'''
IMG1 = None
def load_images():
global IMG1
IMG1 = tk.PhotoImage(data=img1_data)
现在使用 PyInstaller 编译我们的 main.py 文件:
pyinstaller main.py --onefile
我们应该看到,一旦任务完成,dist 中有一个可执行文件,名为main.exe。