-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCompilerPYtoEXE.py
155 lines (121 loc) · 6 KB
/
CompilerPYtoEXE.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# -*- coding: utf-8 -*-
import subprocess
import tkinter as tk
from tkinter import messagebox
from tkinter import filedialog
from tkinter import Toplevel
from tkinter import ttk # Importar ttk para usar Progressbar
import threading
from PIL import Image, ImageTk
import os
def compile_to_exe():
# Obtener el Bot Token y Server ID ingresados
bot_token = entry_token.get()
server_id = entry_server.get()
if not bot_token or not server_id:
messagebox.showerror("Error", "Por favor, ingrese ambos parámetros: Bot Token y Server ID.")
return
# Abrir el archivo Python existente para editarlo
file_path = filedialog.askopenfilename(
defaultextension=".py",
filetypes=[("Python Files", "*.py")],
title="Seleccionar archivo de bot"
)
if not file_path:
return # Si el usuario cancela, no hacer nada
# Crear una ventana emergente para mostrar la barra de progreso y la imagen
progress_window = Toplevel()
progress_window.title("Compilando...")
progress_window.geometry("500x150")
progress_window.configure(bg="#2E2E2E")
progress_window.resizable(False, False)
# Agregar la imagen del diablo
try:
# Obtener la ruta absoluta desde el directorio donde se ejecuta el script
script_dir = os.path.dirname(os.path.abspath(__file__)) # Directorio del script
image_path = os.path.join(script_dir, "logoCompiler/diablo_emote.png") # Ruta absoluta a la imagen
diablo_img = Image.open(image_path) # Abrir la imagen usando la ruta
diablo_img = diablo_img.resize((50, 50)) # Redimensionar la imagen
diablo_photo = ImageTk.PhotoImage(diablo_img)
# Crear y mostrar el label con la imagen
label_diablo = tk.Label(progress_window, image=diablo_photo, bg="#2E2E2E")
label_diablo.image = diablo_photo
label_diablo.pack(pady=10)
except FileNotFoundError:
messagebox.showerror("Error", "No se pudo encontrar la imagen del diablo. Asegúrate de que la ruta sea correcta.")
return
# Crear la barra de progreso
progress_bar = ttk.Progressbar(progress_window, orient="horizontal", length=400, mode="indeterminate") # Usar ttk
progress_bar.pack(pady=10)
progress_bar.start()
# Función para realizar la compilación
def compile_process():
try:
# Leer el contenido del archivo seleccionado con codificación UTF-8
with open(file_path, "r", encoding="utf-8") as file:
file_content = file.read()
# Reemplazar los valores de bot_token y server_id en el archivo
file_content = file_content.replace('bot_token = "{bot_token}"', f'bot_token = "{bot_token}"')
file_content = file_content.replace('server_id = "{server_id}"', f'server_id = "{server_id}"')
# Guardar el archivo con las modificaciones usando UTF-8
with open(file_path, "w", encoding="utf-8") as file:
file.write(file_content)
# Permitir al usuario seleccionar una carpeta donde depositar el ejecutable
output_directory = filedialog.askdirectory(title="Selecciona la carpeta de destino para el ejecutable")
if not output_directory:
raise ValueError("No se seleccionó ninguna carpeta de destino.")
#################################################################
# IMPORTANTE!! RUTA ABSOLUTA DE PYINSTALLER #
#################################################################
# Ruta abosulta de pyinstaller
pyinstaller_path = "C:/Users/d1se0/AppData/Local/Packages/PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0/LocalCache/local-packages/Python311/Scripts/pyinstaller.exe"
# Construir el comando completo como una sola cadena
command = f'"{pyinstaller_path}" --onefile --noconsole --distpath "{output_directory}" "{file_path}"'
# Ejecutar pyinstaller como una única cadena
subprocess.run(command, shell=True, check=True)
# Cerrar la ventana de progreso cuando termine
progress_window.destroy()
messagebox.showinfo("Éxito", f"El archivo .exe se generó correctamente en la carpeta: {output_directory}")
except Exception as e:
progress_window.destroy()
messagebox.showerror("Error", f"Hubo un problema: {e}")
# Ejecutar la compilación en un hilo para no bloquear la interfaz gráfica
compile_thread = threading.Thread(target=compile_process)
compile_thread.start()
# Crear la interfaz gráfica
root = tk.Tk()
root.title("Compilador de Bot")
root.geometry("500x400")
root.configure(bg="#2E2E2E")
root.resizable(False, False)
# Estilo moderno
style_font = ("Arial", 14)
style_fg = "#00FF00"
style_bg = "#2E2E2E"
button_fg = "#FFFFFF"
button_bg = "#4CAF50"
button_hover = "#45a049"
# Agregar un título
label_title = tk.Label(root, text="Compilador de Bot", font=("Arial", 20, "bold"), fg=style_fg, bg=style_bg)
label_title.pack(pady=20)
# Bot Token
label_token = tk.Label(root, text="Bot Token:", font=style_font, fg=style_fg, bg=style_bg)
label_token.pack(pady=10)
entry_token = tk.Entry(root, width=40, font=style_font, fg=style_fg, bg="#1C1C1C", insertbackground=style_fg, relief="flat", bd=0)
entry_token.pack(pady=10)
# Server ID
label_server = tk.Label(root, text="Server ID:", font=style_font, fg=style_fg, bg=style_bg)
label_server.pack(pady=10)
entry_server = tk.Entry(root, width=40, font=style_font, fg=style_fg, bg="#1C1C1C", insertbackground=style_fg, relief="flat", bd=0)
entry_server.pack(pady=10)
# Botón de compilar
def on_hover(event):
compile_button.config(bg=button_hover)
def on_leave(event):
compile_button.config(bg=button_bg)
compile_button = tk.Button(root, text="Compilar a .exe", font=("Arial", 16, "bold"), fg=button_fg, bg=button_bg, relief="flat", command=compile_to_exe)
compile_button.pack(pady=30)
# Hover effect
compile_button.bind("<Enter>", on_hover)
compile_button.bind("<Leave>", on_leave)
root.mainloop()