如何将自己的python文件写成有GUI的exe可执行文件
1. 先看最终效果。生成了一个有猫头的exe文件;双击之后,跳出对话框如下;
2. 这个exe的作用是从一个网址去下载一个模型。需要的参数如上;endpoint, training_key等;
3. 首先写gui的代码,包括具体的从哪里取值;
import time import requests import argparse import tkinter as tk from tkinter import * from tkinter import messagebox class ScriptGUI(object): def __init__(self, args): self.args = args # save arguments self.window = tk.Tk() # create main widget def download_button_click(self, e1, e2, e3, e4, e5, e6): # 获取 Entry 组件的值 endpoint = e1.get() training_key = e2.get() project_id = e3.get() iteration_id = e4.get() platform = e5.get() export_file_path = e6.get() # 更新 args 属性 self.args.endpoint = endpoint self.args.training_key = training_key self.args.project_id = project_id self.args.iteration_id = iteration_id self.args.platform = platform self.args.export_file_path = export_file_path # 调用下载函数 status = download_model_function(self.args) if status == 1: messagebox.showinfo("Success!", "下载成功!\n 地址为:"+ str(self.args.export_file_path)) self.window.destroy() else: messagebox.showinfo("Failed!", "下载失败!") def back_button_click(self): self.window.destroy() def set_init_window(self): self.window.title("Model Downloading...") self.window.geometry("350x250+400+300") # create 6 entry lines (for our 6 arguments) tk.Label(self.window, text="endpoint:").grid(row=0) tk.Label(self.window, text="training_key:").grid(row=1) tk.Label(self.window, text="project_id:").grid(row=2) tk.Label(self.window, text="iteration_id:").grid(row=3) tk.Label(self.window, text="platform:").grid(row=4) tk.Label(self.window, text="export_file_path:").grid(row=5) e1 = tk.Entry(self.window) e2 = tk.Entry(self.window,show='*') e3 = tk.Entry(self.window) e4 = tk.Entry(self.window) e5 = tk.Entry(self.window) e6 = tk.Entry(self.window) e1.grid(row=0, column=1, padx=10, pady=5) e2.grid(row=1, column=1, padx=10, pady=5) e3.grid(row=2, column=1, padx=10, pady=5) e4.grid(row=3, column=1, padx=10, pady=5) e5.grid(row=4, column=1, padx=10, pady=5) e5.insert(0,'IVS') e6.grid(row=5, column=1, padx=10, pady=5) tk.Button(self.window, text="下载模型", width=10, command=lambda: self.download_button_click(e1, e2, e3, e4, e5, e6)).grid(row=6, column=0, sticky="w", padx=40, pady=5) tk.Button(self.window, text="退出", width=10, command=self.back_button_click).grid(row=6, column=1, sticky="w", padx=40, pady=5) def run(self): self.set_init_window() self.window.mainloop() # run widget (display) def parse_arguments(): parser = argparse.ArgumentParser() parser.add_argument("-e", "--endpoint", type=str, help="EndPoint") parser.add_argument("-t", "--training_key", type=str, help="Training Key") parser.add_argument("-p", "--project_id", type=str, help="Project ID") parser.add_argument("-i", "--iteration_id", type=str, help="Iteration ID") parser.add_argument("-pl", "--platform", default="IVS", type=str, help="Platform") parser.add_argument("-ex", "--export_file_path", type=str, help="Export file path") return parser.parse_args() def get_export_status(trainer, project_id, iteration_id, platform): try: export = trainer.export_iteration(project_id, iteration_id, platform, raw=False) except Exception as e: exports = trainer.get_exports(project_id, iteration_id) for e in exports: if e.platform == platform: return e raise e return export def wait_for_export(trainer, project_id, iteration_id, platform): export = get_export_status(trainer, project_id, iteration_id, platform) while export.status == "Exporting": print("Waiting 10 seconds...") time.sleep(10) export = get_export_status(trainer, project_id, iteration_id, platform) print("Export status is: ", export.status) return export def download_export(trainer, export, save_path): export_file = requests.get(export.download_uri) with open(save_path, "wb") as file: file.write(export_file.content) def main(): # get arguments defined by user args = parse_arguments() if args.endpoint is None or args.training_key is None or args.project_id is None or args.iteration_id is None or args.export_file_path is None: print("Please provide all the arguments") else: gui = ScriptGUI(args) gui.run() def download_model_function(args): pass if __name__ == "__main__": main()
4. 写好gui了,然后转换成exe; (参考:Python脚本打包成exe,看这一篇就够了!_python 打包_利白的博客-CSDN博客)
Pyinstaller -F -w -i cat.ico run.py