我将python脚本转换为exe文件时遇到问题。我使用pyinstaller。
当我尝试启动exe文件时,会发生此致命错误。
我尝试了不同的标志配置:
- 窗 --noconsole --onefile --noupx
但它没有解决问题。
这只是我的脚本(GUI)的一部分:
#GUI
window = tkinter.Tk()
window.title("SAPC - Scanned Aerial Photographs Correction")
window.geometry("300x300+500+200")
window.iconbitmap(default='favicon.ico')
logo1=PIL.Image.open("logo.png")
logo2 = PIL.ImageTk.PhotoImage(logo1)
tkinter.Label(window, text="Ver.1.0 Beta")
tkinter.Label(window,image=logo2).grid(row=0, column=0, columnspan=2, rowspan=2, sticky=tkinter.N+tkinter.E+tkinter.S+tkinter.W)
menubar=tkinter.Menu(window)
filemenu = tkinter.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=openfile)
filemenu.add_command(label="Exit", command=window.quit)
editmenu = tkinter.Menu(menubar, tearoff=0)
editmenu.add_command(label="Template selection", command=lambda: mainfunction())
editmenu.add_command(label="Marker measurement", command=lambda: pomiarznaczka())
editmenu.add_command(label="Matching", command=lambda: testbutton())
editmenu.add_command(label="Accuracy analysis", command=lambda: analizadok())
editmenu.add_command(label="Transform", command=lambda: transformacja())
editmenu.add_command(label="Mask generator", command=lambda: maskgenerator())
menubar.add_cascade(label="File", menu=filemenu)
menubar.add_cascade(label="Workflow", menu=editmenu)
window.config(menu=menubar)
window.mainloop()
现在当我从文件中删除加载图标和徽标的部分代码并再次将py脚本转换为exe文件时......它工作正常。
我如何解决这个问题?图标和徽标是必要的。
答案 0 :(得分:1)
我猜测脚本无法找到图像文件而失败,因为没有代码可以处理此异常。
我会将图像包含在脚本本身中,或者包含在主脚本中导入的单独python文件中。这样您就可以控制路径,也无需将图像与exe文件捆绑在一起。查看my answer to this question以获取此方法的完整演示。
它的要点......
1 - 将图片转换为base64字符串
import base64
with open(img_input, "rb") as f:
with open(img_output_b64, "wb") as f2:
f2.write(base64.b64encode(f.read()))
2 - 将新编写文件img_output_b64
的内容粘贴到您在此处发布的主脚本中;也许在一个字典中也包含文件名和原始图像的哈希值(因此您可以在以后确保完整性)。解码并再次将图像写入文件。
import base64
with open(original_image_filename, "wb") as f:
f.write(base64.b64decode(image_encoded_as_base64))
3 - 现在,您应该能够像您在此处发布的脚本中一样加载它。
window.iconbitmap(default=original_image_filename)