96 lines
3.8 KiB
Python
96 lines
3.8 KiB
Python
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}")
|