Saltar a contenido

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

  1. Calculadora científica avanzada: Añadir funciones hiperbólicas, combinatorias
  2. Calculadora de matrices: Operaciones con matrices 2x2, 3x3
  3. Calculadora financiera: Interés compuesto, amortización
  4. Calculadora de programador: Binario, hexadecimal, operaciones bit a bit
  5. Calculadora gráfica: Plotear funciones usando matplotlib
  6. Calculadora de estadística: Media, desviación estándar, regresión

¡Experimenta y crea tu propia versión personalizada de la calculadora!