import subprocess import platform from tkinter import messagebox import os def launch_browser(url): """ Lanza la URL proporcionada usando el navegador predeterminado del sistema. :param url: La URL a abrir. """ if not url.startswith(('http://', 'https://')): url = 'http://' + url try: # Usa webbrowser.open para abrir URLs de manera segura y multiplataforma import webbrowser webbrowser.open(url) return True except Exception as e: messagebox.showerror("Error de Navegador", f"No se pudo abrir el navegador predeterminado: {e}") return False def launch_custom_app(command_list, app_name="Aplicación"): """ Lanza una aplicación externa usando una lista de comandos y argumentos. Ejemplo de command_list: ['notepad.exe', 'C:\\ruta\\a\\archivo.txt'] :param command_list: Una lista que contiene el ejecutable y sus argumentos. :param app_name: Nombre de la aplicación para mensajes de error. """ try: # Usamos subprocess.Popen para lanzar la aplicación sin bloquear el hilo principal (GUI) # Esto permite que la aplicación externa se abra y la GUI siga respondiendo. subprocess.Popen(command_list) return True except FileNotFoundError: messagebox.showerror(f"Error al lanzar {app_name}", f"El ejecutable '{command_list[0]}' no fue encontrado en el sistema (PATH).") return False except Exception as e: messagebox.showerror(f"Error al lanzar {app_name}", f"Ocurrió un error inesperado: {e}") return False def get_platform_browser_command(url): """Devuelve la lista de comandos para abrir el navegador según el SO.""" # Intenta usar Chrome si está disponible, si no, usa el predeterminado. if platform.system() == "Windows": return ["cmd", "/c", "start", "chrome", url] elif platform.system() == "Linux": # 'google-chrome' o 'xdg-open' (para predeterminado) return ["google-chrome", url] elif platform.system() == "Darwin": # macOS return ["open", "-a", "Google Chrome", url] else: # Si no se reconoce el SO, recurrimos al método seguro de webbrowser return None