Personalización¶
Aprende cómo personalizar tu calculadora científica para que se adapte a tus necesidades y preferencias.
🎨 Personalización Visual¶
Cambiar colores de los botones¶
Puedes modificar el esquema de colores editando los valores en las llamadas a crear_boton():
# Ejemplo: Cambiar botones científicos a color verde
crear_boton(ventana, "sin", 2, 0, seno, "#2ecc71", "white") # Verde en lugar de azul
Esquema de colores actual:
| Categoría | Color actual | Hex | Sugerencias alternativas |
|---|---|---|---|
| Memoria | Rojo | #e74c3c | #c0392b, #e67e22 |
| Limpieza | Naranja | #f39c12 | #e67e22, #d35400 |
| Científicas | Azul | #3498db | #2980b9, #1abc9c |
| Constantes | Púrpura | #9b59b6 | #8e44ad, #e91e63 |
| Números | Gris claro | #ecf0f1 | #ffffff, #f8f9fa |
| Operadores | Gris oscuro | #34495e | #2c3e50, #273a47 |
| Igual | Verde | #27ae60 | #2ecc71, #16a085 |
Cambiar el tamaño de la ventana¶
# Ventana más grande
ventana.geometry("600x700")
# Ventana más pequeña
ventana.geometry("400x500")
Modificar la tipografía¶
# En crear_boton(), cambiar:
font=("Arial", 12, "bold")
# Por ejemplo:
font=("Helvetica", 14, "normal") # Helvetica más grande
font=("Times", 10, "bold") # Times más pequeño
font=("Courier", 12, "italic") # Courier itálico
Personalizar el fondo de la ventana¶
# Cambiar color de fondo principal
ventana.configure(bg="#1a1a1a") # Negro
ventana.configure(bg="#ffffff") # Blanco
ventana.configure(bg="#2c3e50") # Azul oscuro (actual)
🔧 Personalización Funcional¶
Añadir nuevas funciones matemáticas¶
def arco_seno():
try:
valor = float(entrada.get())
if -1 <= valor <= 1:
resultado = math.degrees(math.asin(valor))
limpiar()
escribir(str(resultado))
else:
limpiar()
escribir("Error")
except:
limpiar()
escribir("Error")
# Añadir el botón correspondiente
crear_boton(ventana, "asin", fila, columna, arco_seno, "#3498db", "white")
Añadir conversión de unidades¶
def celsius_to_fahrenheit():
try:
celsius = float(entrada.get())
fahrenheit = (celsius * 9/5) + 32
limpiar()
escribir(str(fahrenheit))
except:
limpiar()
escribir("Error")
Modificar el comportamiento de las constantes¶
# En lugar de insertar π, insertarlo con más precisión
crear_boton(ventana, "π", 4, 0, lambda: escribir("3.141592653589793"), "#9b59b6", "white")
# O añadir más constantes
def insertar_constante_oro():
escribir("1.618033988749") # Número áureo
crear_boton(ventana, "φ", fila, columna, insertar_constante_oro, "#9b59b6", "white")
⌨️ Personalización de Entrada¶
Añadir soporte para teclado¶
def on_key_press(event):
"""Manejar pulsaciones de teclado"""
key = event.char
if key.isdigit():
escribir(key)
elif key in ['+', '-', '*', '/']:
escribir(key)
elif key == '.':
escribir(key)
elif key == '\r': # Enter
calcular()
elif key == '\b': # Backspace
borrar()
# Vincular eventos de teclado
ventana.bind('<KeyPress>', on_key_press)
Añadir tooltips (ayuda contextual)¶
import tkinter.ttk as ttk
def crear_tooltip(widget, texto):
def mostrar_tooltip(event):
tooltip = tk.Toplevel()
tooltip.wm_overrideredirect(True)
tooltip.wm_geometry(f"+{event.x_root+10}+{event.y_root+10}")
label = tk.Label(tooltip, text=texto, background="yellow", font=("Arial", 8))
label.pack()
widget.tooltip = tooltip
def ocultar_tooltip(event):
if hasattr(widget, 'tooltip'):
widget.tooltip.destroy()
widget.bind('<Enter>', mostrar_tooltip)
widget.bind('<Leave>', ocultar_tooltip)
# Usar con botones
boton_sin = crear_boton(ventana, "sin", 2, 0, seno, "#3498db", "white")
crear_tooltip(boton_sin, "Seno (en grados)")
📱 Variaciones de Diseño¶
Calculadora en modo oscuro¶
# Tema oscuro completo
TEMA_OSCURO = {
'ventana_bg': '#1a1a1a',
'frame_bg': '#1a1a1a',
'entrada_bg': '#2d2d2d',
'entrada_fg': '#ffffff',
'numeros_bg': '#404040',
'numeros_fg': '#ffffff',
'operadores_bg': '#666666',
'cientificas_bg': '#0066cc'
}
# Aplicar tema
ventana.configure(bg=TEMA_OSCURO['ventana_bg'])
frame_pantalla.configure(bg=TEMA_OSCURO['frame_bg'])
entrada.configure(bg=TEMA_OSCURO['entrada_bg'], fg=TEMA_OSCURO['entrada_fg'])
Calculadora con iconos¶
# Si tienes archivos de iconos
try:
icon_sin = tk.PhotoImage(file="icons/sin.png")
crear_boton(ventana, "", 2, 0, seno, "#3498db", "white", image=icon_sin)
except:
# Fallback a texto si no hay iconos
crear_boton(ventana, "sin", 2, 0, seno, "#3498db", "white")
Calculadora compacta¶
# Versión más pequeña sin funciones científicas
def crear_calculadora_basica():
ventana.geometry("300x400")
# Solo botones básicos
botones_basicos = [
['C', '←', '/', '*'],
['7', '8', '9', '-'],
['4', '5', '6', '+'],
['1', '2', '3', '='],
['0', '.', '', '']
]
# Crear solo estos botones
for i, fila in enumerate(botones_basicos):
for j, texto in enumerate(fila):
if texto:
# Lógica simplificada para botones básicos
pass
🔍 Funciones de Debug¶
Añadir modo debug¶
DEBUG_MODE = True
def debug_print(mensaje):
if DEBUG_MODE:
print(f"[DEBUG] {mensaje}")
def calcular():
try:
expresion = entrada.get()
debug_print(f"Expresión original: {expresion}")
# ... resto de la función ...
debug_print(f"Resultado: {resultado}")
except Exception as e:
debug_print(f"Error en calcular(): {e}")
limpiar()
escribir("Error")
Historial de operaciones¶
historial = []
def calcular():
try:
expresion = entrada.get()
resultado = eval(expresion)
# Guardar en historial
historial.append(f"{expresion} = {resultado}")
limpiar()
escribir(str(resultado))
except:
limpiar()
escribir("Error")
def mostrar_historial():
historial_window = tk.Toplevel(ventana)
historial_window.title("Historial")
for i, operacion in enumerate(historial[-10:]): # Últimas 10
tk.Label(historial_window, text=operacion).pack()
💾 Guardar Configuración¶
Configuración en archivo¶
import json
def guardar_configuracion():
config = {
'tema': 'oscuro',
'tamaño_fuente': 12,
'color_numeros': '#ecf0f1',
'memoria': memoria
}
with open('calculadora_config.json', 'w') as f:
json.dump(config, f)
def cargar_configuracion():
try:
with open('calculadora_config.json', 'r') as f:
config = json.load(f)
return config
except:
return {} # Configuración por defecto
# Cargar al inicio
config = cargar_configuracion()
🚀 Ideas para Extensiones¶
- Calculadora científica avanzada: Añadir funciones hiperbólicas, combinatorias
- Calculadora de matrices: Operaciones con matrices 2x2, 3x3
- Calculadora financiera: Interés compuesto, amortización
- Calculadora de programador: Binario, hexadecimal, operaciones bit a bit
- Calculadora gráfica: Plotear funciones usando matplotlib
- Calculadora de estadística: Media, desviación estándar, regresión
¡Experimenta y crea tu propia versión personalizada de la calculadora!