使用说明:

1.选择 .py 文件:选择要打包的 Python 脚本文件。

2.选择图标文件:支持 .ico, .png, .jpg, .jpeg, .bmp, .gif 等格式,但 PyInstaller 只能直接使用 .ico 格式的图标。其他格式会自动转换。

3.选择输出目录:选择打包后 .exe 文件的保存目录。

4.开始打包:成功或失败后都会弹出相应的提示框。

 

依赖项:

Python 3.x

tkinter (Python 自带)

PyInstaller (可以通过 pip install pyinstaller 安装)

 

成品:

Pyinstaller打包py.zip

 

PixPin_2024-09-02_17-18-52.jpg

 

优化:

为了在打包过程中避免显示命令行的黑色窗口,可以在使用 PyInstaller 时添加 --noconsole 选项。此选项会将应用程序打包为一个 Windows GUI 应用程序,而不是控制台应用程序。

下面是优化后的代码,包含在使用 PyInstaller 时添加 --noconsole 选项,以确保打包后的可执行文件不会显示命令行窗口。

import os
import subprocess
import tkinter as tk
from tkinter import filedialog, messagebox

def select_py_file():
    py_file_path.set(filedialog.askopenfilename(filetypes=[("Python 文件", "*.py")]))
    
def select_icon_file():
    icon_file_path.set(filedialog.askopenfilename(filetypes=[("图标文件", "*.ico *.png *.jpg *.jpeg *.bmp *.gif")]))
    
def select_output_dir():
    output_dir_path.set(filedialog.askdirectory())

def start_packing():
    py_file = py_file_path.get()
    icon_file = icon_file_path.get()
    output_dir = output_dir_path.get()

    if not py_file:
        messagebox.showwarning("警告", "请选择一个 .py 文件。")
        return

    if not output_dir:
        messagebox.showwarning("警告", "请选择导出目录。")
        return
    
    try:
        # 使用 PyInstaller 打包命令
        cmd = [
            "pyinstaller",
            "--onefile",
            "--noconsole",  # 不显示命令行窗口
            "--distpath", output_dir,
            py_file
        ]
        if icon_file:
            cmd.extend(["--icon", icon_file])

        # 执行打包命令
        result = subprocess.run(cmd, capture_output=True, text=True)
        
        if result.returncode == 0:
            messagebox.showinfo("成功", "打包成功!")
        else:
            messagebox.showerror("错误", f"打包失败!\n{result.stderr}")
    
    except Exception as e:
        messagebox.showerror("错误", f"发生错误:\n{e}")

# GUI 主窗口
root = tk.Tk()
root.title("Python 转 EXE 打包器")
root.geometry("530x220")  # 增加窗口宽度

# 文件路径变量
py_file_path = tk.StringVar()
icon_file_path = tk.StringVar()
output_dir_path = tk.StringVar()

# GUI 组件
tk.Label(root, text="选择 .py 文件:").grid(row=0, column=0, padx=10, pady=10, sticky="e")
tk.Entry(root, textvariable=py_file_path, width=50).grid(row=0, column=1, pady=10)
tk.Button(root, text="浏览", command=select_py_file).grid(row=0, column=2, padx=10, pady=10)

tk.Label(root, text="选择图标文件:").grid(row=1, column=0, padx=10, pady=10, sticky="e")
tk.Entry(root, textvariable=icon_file_path, width=50).grid(row=1, column=1, pady=10)
tk.Button(root, text="浏览", command=select_icon_file).grid(row=1, column=2, padx=10, pady=10)

tk.Label(root, text="选择导出目录:").grid(row=2, column=0, padx=10, pady=10, sticky="e")
tk.Entry(root, textvariable=output_dir_path, width=50).grid(row=2, column=1, pady=10)
tk.Button(root, text="浏览", command=select_output_dir).grid(row=2, column=2, padx=10, pady=10)

tk.Button(root, text="开始打包", command=start_packing).grid(row=3, column=1, pady=20)

# 运行主窗口
root.mainloop()