本质上,我正在努力使用 Tkinter GUI 和其他几个库来开发应用程序。目标是最终在 GitHub 上发布该应用程序,让我的同学下载并测试它,因为这是一项大学作业。为了实现这一目标,我正在使用 PyInstaller。
在我的项目中,main.py 作为应用程序的入口点。我使用以下命令调用 PyInstaller:
pyinstaller --onefile main.py
该过程似乎运行顺利,生成 build 和 dist 目录没有任何问题。
但是,我遇到了异常情况。当我通过 VSCode 终端执行 dist/main.exe 时,应用程序按预期运行。但是,如果我尝试通过双击 .exe 文件打开它,我会遇到以下错误:
Traceback (most recent call last):
File "main.py", line 4, in <module>
File "app.py", line 21, in __init__
File "app.py", line 28, in entry_show
File "Frames\intro.py", line 8, in __init__
File "Frames\intro.py", line 13, in create_widgets
File "PIL\Image.py", line 3247, in open FileNotFoundError: [Errno 2] No such file or directory: 'FuelTrackRootTitle.png' [1856] Failed to execute script 'main' due to an unhandled exception!
最初,当我遇到此回溯时,我使用的图像文件位于我运行 PyInstaller 命令的项目目录内的一个文件夹中。因此,我不认为问题在于图像文件位于其他地方。
请注意,我对每个文件都使用相对路径。
我收到错误的文件如下:
import tkinter as tk
from tkinter import ttk
from PIL import Image, ImageTk
class IntroFrame(tk.Frame):
def __init__(self, parent):
super().__init__(parent, width=500, height=600, background='white')
self.create_widgets()
def create_widgets(self): # Agrega el logo, titulo y el texto de creador a la intro
# Titulo
title_image = Image.open("FuelTrackRootTitle.png")
title_image_tk = ImageTk.PhotoImage(title_image)
titulito = ttk.Label(self, image=title_image_tk, background='white')
titulito.image = title_image_tk
titulito.place(relx=0.5, rely=0.7, anchor='center')
# Logo
icon_image = Image.open("FuelTrackIconImage.png").resize((300,300))
icon_image_tk = ImageTk.PhotoImage(icon_image)
logo = ttk.Label(self, image=icon_image_tk, background='white')
logo.image = icon_image_tk
logo.place(relx=0.5, rely=0.36, anchor='center')
此时,我刚刚尝试将 .png 文件放在 images 文件夹之外,并与项目内的 main.py 处于同一级别,还尝试了一种涉及模块 sys 和 os 的解决方案,但这些东西都不起作用我。
如果有人能帮助我解决这个问题,那对我会有很大帮助。
提前致谢:)。
这个答案解决了我的问题https://stackoverflow.com/a/78290574/20782948猜你可能想尝试创建一个setup.py文件并在pip中安装cx_Freeze