58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
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 |