188 lines
5.3 KiB
Markdown
188 lines
5.3 KiB
Markdown
# Calculadora MAV - Versión PySide6 con Diseño Minimalista
|
|
|
|
## 🎯 Implementación Minimalista de 3 Paneles
|
|
|
|
Esta es la implementación de la Calculadora MAV usando **PySide6** con diseño minimalista de 3 paneles y renderizado **MathJax** para ecuaciones LaTeX, manteniendo correspondencia 1:1 línea por línea entre entrada y salida.
|
|
|
|
## ✨ Características Principales
|
|
|
|
### 🔧 Interfaz Moderna
|
|
- **PySide6**: Framework Qt moderno y nativo
|
|
- **Tema Oscuro**: Diseño elegante y profesional
|
|
- **Resaltado de Sintaxis**: Coloreado inteligente de expresiones matemáticas
|
|
- **Interfaz Responsive**: Se adapta al tamaño de la ventana
|
|
|
|
### 🧮 Motor de Cálculo
|
|
- **SymPy**: Motor algebraico simbólico completo
|
|
- **Evaluación Asíncrona**: Cálculos en threads separados
|
|
- **Tipos Personalizados**: Sistema de tipos extensible
|
|
- **Historial Automático**: Guarda y restaura sesiones
|
|
|
|
### 📐 Renderizado LaTeX
|
|
- **MathJax**: Renderizado web profesional de ecuaciones
|
|
- **Tiempo Real**: Actualización automática del panel LaTeX
|
|
- **Múltiples Tipos**: Ecuaciones, asignaciones y expresiones simbólicas
|
|
- **Interactivo**: Panel redimensionable y ocultable
|
|
|
|
## 🚀 Instalación y Uso
|
|
|
|
### Requisitos Previos
|
|
```bash
|
|
Python 3.8 o superior
|
|
```
|
|
|
|
### Instalar Dependencias
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
### Ejecutar la Aplicación
|
|
```bash
|
|
# Opción 1: Usar el launcher (recomendado)
|
|
python launch_pyside6.py
|
|
|
|
# Opción 2: Ejecutar directamente
|
|
python main_calc_app_pyside6.py
|
|
```
|
|
|
|
## 🎮 Guía de Uso
|
|
|
|
### Interfaz Principal - 3 Paneles Minimalistas
|
|
- **Panel 1 (Izquierda)**: Entrada de expresiones matemáticas
|
|
- **Panel 2 (Centro)**: Resultados con correspondencia 1:1 línea por línea
|
|
- **Panel 3 (Derecha)**: Renderizado LaTeX/MathJax de ecuaciones y comentarios (colapsable)
|
|
|
|
### Atajos de Teclado
|
|
| Atajo | Función |
|
|
|-------|---------|
|
|
| `Ctrl+Enter` | Evaluar expresión |
|
|
| `Shift+Enter` | Evaluar expresión |
|
|
| `F12` | Mostrar/ocultar panel LaTeX |
|
|
| `Ctrl+N` | Nueva sesión |
|
|
| `Ctrl+O` | Abrir archivo |
|
|
| `Ctrl+S` | Guardar archivo |
|
|
|
|
### Ejemplos de Uso
|
|
```python
|
|
# Ecuaciones básicas
|
|
x**2 + y**2 = r**2
|
|
|
|
# Resolver ecuaciones
|
|
solve(x**2 - 4, x)
|
|
|
|
# Cálculo diferencial
|
|
diff(x**3 + 2*x**2 + x, x)
|
|
|
|
# Cálculo integral
|
|
integrate(x**2, x)
|
|
|
|
# Álgebra lineal
|
|
Matrix([[1, 2], [3, 4]])
|
|
|
|
# Asignaciones
|
|
a = x**2 + 5
|
|
b = solve(a - 10, x)
|
|
```
|
|
|
|
## 🎨 Características de la Interfaz
|
|
|
|
### Resaltado de Sintaxis
|
|
- **Números**: Color azul claro (`#89ddff`)
|
|
- **Funciones**: Color azul (`#82aaff`) y negrita
|
|
- **Variables**: Color verde claro (`#c3e88d`)
|
|
- **Operadores**: Color rojo (`#ff6b6b`) y negrita
|
|
- **Paréntesis**: Color naranja (`#f78c6c`) y negrita
|
|
|
|
### Panel LaTeX
|
|
- **Ecuaciones**: Borde azul (`#4fc3f7`)
|
|
- **Asignaciones**: Borde verde (`#c3e88d`)
|
|
- **Expresiones Simbólicas**: Borde naranja (`#f78c6c`)
|
|
- **Hover Effects**: Cambios de color al pasar el ratón
|
|
|
|
## 🔧 Arquitectura Técnica
|
|
|
|
### Componentes Principales
|
|
```
|
|
HybridCalculatorPySide6 (Ventana Principal)
|
|
├── MathInputHighlighter (Resaltado de sintaxis)
|
|
├── CalculatorWorker (Evaluación asíncrona)
|
|
├── MathJaxPanel (Renderizado LaTeX)
|
|
└── PureAlgebraicEngine (Motor de cálculo)
|
|
```
|
|
|
|
### Threading
|
|
- **UI Thread**: Interfaz de usuario principal
|
|
- **Worker Thread**: Evaluación matemática asíncrona
|
|
- **Signals/Slots**: Comunicación segura entre threads
|
|
|
|
### WebEngine
|
|
- **QWebEngineView**: Para renderizado MathJax
|
|
- **JavaScript Integration**: Comunicación bidireccional
|
|
- **HTML5**: Soporte completo para MathJax 3.x
|
|
|
|
## 🆚 Comparación con Versión Original
|
|
|
|
| Característica | Tkinter Original | PySide6 Nueva |
|
|
|----------------|------------------|---------------|
|
|
| **Framework** | Tkinter | PySide6/Qt |
|
|
| **Renderizado LaTeX** | pywebview/tkinterweb | MathJax nativo |
|
|
| **Tema** | Básico | Moderno oscuro |
|
|
| **Resaltado** | No | Sintaxis completa |
|
|
| **Threading** | Básico | Asíncrono avanzado |
|
|
| **Responsive** | Limitado | Completo |
|
|
| **Cross-platform** | Básico | Nativo Qt |
|
|
|
|
## 🔍 Solución de Problemas
|
|
|
|
### Error: "No module named 'PySide6'"
|
|
```bash
|
|
pip install PySide6
|
|
```
|
|
|
|
### Error: "No module named 'PySide6.QtWebEngineWidgets'"
|
|
```bash
|
|
pip install PySide6-WebEngine
|
|
```
|
|
|
|
### Panel LaTeX no funciona
|
|
1. Verificar conexión a internet (MathJax CDN)
|
|
2. Comprobar que WebEngine esté instalado
|
|
3. Ver logs en consola para errores JavaScript
|
|
|
|
### Rendimiento lento
|
|
1. Cerrar otras aplicaciones que usen Qt/WebEngine
|
|
2. Reducir el número de ecuaciones en el panel LaTeX
|
|
3. Verificar que no hay bucles infinitos en expresiones
|
|
|
|
## 🚧 Desarrollo y Contribución
|
|
|
|
### Estructura del Código
|
|
```
|
|
main_calc_app_pyside6.py # Aplicación principal
|
|
launch_pyside6.py # Launcher con verificaciones
|
|
requirements.txt # Dependencias actualizadas
|
|
README_PYSIDE6.md # Esta documentación
|
|
```
|
|
|
|
### Extensiones Futuras
|
|
- [ ] Autocompletado inteligente
|
|
- [ ] Gráficos integrados con matplotlib
|
|
- [ ] Exportación de ecuaciones LaTeX
|
|
- [ ] Temas personalizables
|
|
- [ ] Plugin system
|
|
- [ ] Colaboración en tiempo real
|
|
|
|
## 📄 Licencia
|
|
|
|
Mismo sistema de licencia que el proyecto original.
|
|
|
|
## 💝 Agradecimientos
|
|
|
|
- **Qt/PySide6**: Framework de interfaz moderna
|
|
- **MathJax**: Renderizado matemático profesional
|
|
- **SymPy**: Motor algebraico potente
|
|
- **Comunidad Python**: Soporte y documentación
|
|
|
|
---
|
|
|
|
**¡Disfruta calculando con la nueva interfaz moderna! 🎉** |