Una calculadora de escritorio desarrollada en Python utilizando Tkinter como interfaz gráfica. El objetivo principal del proyecto ha sido aprender el funcionamiento de una interfaz gráfica, la gestión de eventos y el tratamiento de expresiones matemáticas sin utilizar librerías externas.
-
Operaciones básicas:
- Suma (+)
- Resta (-)
- Multiplicación (*)
- División (/)
-
Soporte para:
- Números decimales
- Paréntesis automáticos
() - Botón AC
- Botón DEL
- Continuar operando después de obtener un resultado
- Conversión automática de multiplicaciones implícitas
5(5)→5*(5)(5)(6)→(5)*(6)
-
Interfaz responsive realizada con Tkinter Grid.
Antes de ejecutar el proyecto es necesario tener instalado:
- Python 3.10 o superior
Comprobar la instalación:
python --versionEl proyecto no utiliza paquetes externos de Python.
Las únicas dependencias son librerías incluidas en la instalación estándar de Python:
import tkinter as tktkinterNo es necesario instalar dependencias mediante pip.
La aplicación utiliza Tkinter para crear la interfaz gráfica.
Tkinter viene incluido normalmente con las instalaciones oficiales de Python, por lo que en la mayoría de sistemas no es necesario instalar nada adicional.
Sin embargo, algunas distribuciones Linux no incluyen Tkinter por defecto. En ese caso es necesario instalarlo mediante el gestor de paquetes del sistema.
sudo pacman -S tksudo apt update
sudo apt install python3-tksudo dnf install python3-tkintersudo zypper install python3-tkDespués de instalarlo, puedes comprobar que Tkinter funciona correctamente ejecutando:
python -m tkinterSi aparece una ventana de prueba, la instalación es correcta.
Clonar el repositorio:
git clone https://github.com/Erik-CR46/Calculator-Python.gitEntrar en la carpeta:
cd Calculator-PythonEjecutar:
python Calculator.pyLa aplicación mantiene una expresión en memoria mientras el usuario pulsa los botones.
Cuando se pulsa =
- Se prepara la expresión.
- Se corrigen multiplicaciones implícitas.
- Se adapta la expresión para que Python pueda evaluarla.
- Se utiliza
eval()para obtener el resultado.
Durante el desarrollo aparecieron varios problemas interesantes:
Después de calcular una operación era necesario distinguir entre:
- continuar operando (
25 + 5) - comenzar una operación nueva
Para ello se implementó una variable de estado:
resultadoMostrarEl comportamiento del botón DEL cambia dependiendo de si:
- se está escribiendo una operación
- se acaba de mostrar un resultado
Esto obligó a almacenar también la expresión anterior.
Uno de los retos fue decidir cuándo insertar:
(
y cuándo insertar
)
evitando producir expresiones inválidas.
Python no entiende expresiones como:
5(5)
o
(5)(6)
por lo que fue necesario convertirlas automáticamente en:
5*(5)
(5)*(6)
antes de evaluarlas.
El porcentaje ha sido la parte más compleja del proyecto.
Python interpreta % como el operador módulo, mientras que una calculadora convencional utiliza el porcentaje de forma diferente.
Por ejemplo:
50 + 10%
debería producir:
55
y no
50.1
Para ello fue necesario crear una fase de preparación de la expresión antes de evaluarla.
Actualmente existen algunas limitaciones conocidas.
El porcentaje funciona únicamente en casos sencillos.
Ejemplos soportados:
50+10%
80-20%
50*10%
50/10%
Sin embargo, expresiones más complejas con múltiples operaciones o paréntesis pueden no comportarse exactamente igual que una calculadora científica.
Esto se debe a que el proyecto utiliza eval() y no un parser matemático propio.
La evaluación de expresiones se realiza mediante:
eval()Aunque resulta muy útil para fines educativos, una implementación profesional debería sustituirlo por un analizador de expresiones propio.
Calculator-Python/
│
├── Calculator.py
├── calculadora.png
└── README.md
Este proyecto se ha desarrollado con fines de aprendizaje para practicar:
- Python
- Tkinter
- Interfaces gráficas
- Eventos
- Manipulación de cadenas
- Expresiones matemáticas
- Organización de código
- Historial de operaciones.
- Cambio de tema (claro / oscuro).
- Operaciones científicas.
- Parser matemático propio.
- Mejor soporte para porcentajes complejos.
- Teclado físico.
- Atajos de teclado.
- Memoria (M+, M-, MR).
Desarrollado como proyecto personal de aprendizaje utilizando Python y Tkinter.