import tkinter as tk import threading import subprocess import os class ApplicationLauncher: def __init__(self, parent): """ Inicializa los botones para lanzar aplicaciones con detección automática de rutas. Args: parent (tk.Frame): Frame donde se colocarán los botones. """ self.parent = parent # Detectar rutas automáticamente self.vscode_path = self.detect_path(["C:\\Program Files\\Microsoft VS Code\\Code.exe", "C:\\Users\\%USERNAME%\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"]) self.eclipse_path = self.detect_path(["C:\\eclipse\\eclipse.exe", "C:\\Program Files\\Eclipse Foundation\\eclipse.exe"]) self.pycharm_path = self.detect_path(["C:\\Program Files\\JetBrains\\PyCharm\\bin\\pycharm64.exe", "C:\\Program Files\\JetBrains\\PyCharm Community Edition 2023.1.4\\bin\\pycharm64.exe"]) # Título para el grupo de botones title = tk.Label(self.parent, text="Aplicaciones", font=("Helvetica", 14, "bold"), bg="lightblue") title.pack(pady=10) # Botón para abrir Visual Studio Code self.vscode_button = tk.Button(self.parent, text="Visual Code", command=self.launch_vscode, bg="lightgreen", font=("Helvetica", 10)) self.vscode_button.pack(fill="x", pady=2) # Botón para abrir Eclipse self.eclipse_button = tk.Button(self.parent, text="Eclipse", command=self.launch_eclipse, bg="lightgreen", font=("Helvetica", 10)) self.eclipse_button.pack(fill="x", pady=2) # Botón para abrir PyCharm self.pycharm_button = tk.Button(self.parent, text="PyCharm", command=self.launch_pycharm, bg="lightgreen", font=("Helvetica", 10)) self.pycharm_button.pack(fill="x", pady=2) def detect_path(self, paths): """ Detecta automáticamente la primera ruta existente de una lista de posibles rutas. Args: paths (list): Lista de rutas posibles para un ejecutable. Returns: str: La primera ruta válida encontrada, o None si no se encuentra ninguna. """ for path in paths: path = os.path.expandvars(path) # Expande variables como %USERNAME% if os.path.exists(path): return path return None def launch_vscode(self): """Lanza Visual Studio Code si se encuentra la ruta.""" self.launch_application(self.vscode_path, "Visual Studio Code") def launch_eclipse(self): """Lanza Eclipse si se encuentra la ruta.""" self.launch_application(self.eclipse_path, "Eclipse") def launch_pycharm(self): """Lanza PyCharm si se encuentra la ruta.""" self.launch_application(self.pycharm_path, "PyCharm") def launch_application(self, path, name): """ Lanza una aplicación si la ruta es válida. Args: path (str): Ruta al ejecutable. name (str): Nombre de la aplicación (para mensajes de error). """ if path: threading.Thread(target=self.run_command, args=([path],), daemon=True).start() else: print(f"No se encontró {name}. Por favor, instálalo o configura la ruta.") def run_command(self, command): """ Ejecuta un comando del sistema operativo para abrir una aplicación. Args: command (list): Comando a ejecutar (lista de argumentos). """ try: subprocess.run(command, check=True) except Exception as e: print(f"Error al intentar abrir la aplicación: {e}")