#!/usr/bin/env python3 """ Launcher para Calculadora MAV - Versión PySide6 con MathJax """ import sys import os import subprocess from pathlib import Path import importlib.util import logging def check_dependencies(): """Verifica que todas las dependencias estén instaladas""" required_modules = [ 'PySide6', 'sympy', 'numpy', 'matplotlib' ] missing = [] for module in required_modules: try: __import__(module) except ImportError: missing.append(module) if missing: print("❌ Faltan las siguientes dependencias:") for module in missing: print(f" - {module}") print("\n💡 Para instalar las dependencias, ejecuta:") print(" pip install -r requirements.txt") return False print("✅ Todas las dependencias están instaladas") return True def check_pyside6_webengine(): """Verifica si PySide6 WebEngine está disponible""" try: from PySide6.QtWebEngineWidgets import QWebEngineView print("✅ PySide6 WebEngine disponible para MathJax") return True except ImportError: print("⚠️ PySide6 WebEngine no disponible") print(" Instalando QtWebEngine...") try: subprocess.run([sys.executable, '-m', 'pip', 'install', 'PySide6-WebEngine'], check=True, capture_output=True) print("✅ PySide6 WebEngine instalado correctamente") return True except subprocess.CalledProcessError: print("❌ No se pudo instalar PySide6 WebEngine") return False def main(): """Función principal del launcher""" print("🚀 Iniciando Calculadora MAV - Diseño Minimalista 3 Paneles") print("=" * 60) # Verificar dependencias if not check_dependencies(): sys.exit(1) # Verificar WebEngine if not check_pyside6_webengine(): print("⚠️ Continuando sin WebEngine (funcionalidad limitada)") print("\n🎯 Iniciando aplicación...") try: # Importar y ejecutar la aplicación from app.gui_main import main as run_app run_app() except ImportError as e: print(f"❌ Error de importación: {e}") print(" Verifica que todos los archivos del proyecto estén presentes") sys.exit(1) except Exception as e: print(f"❌ Error inesperado: {e}") import traceback traceback.print_exc() sys.exit(1) if __name__ == "__main__": main()