Python GUI Development

Dominando el Cambio de Frames en Tkinter

Spread the love

La librería Tkinter de Python no ofrece un mecanismo directo de «cambio de marco» como los frameworks web. En su lugar, se gestiona la visibilidad de múltiples marcos dentro de una única ventana principal para crear la ilusión de cambiar entre diferentes pantallas o secciones. Este tutorial demuestra cómo construir una interfaz de usuario dinámica y organizada con esta técnica.

Tabla de contenido

Creando Marcos y un Contenedor

La idea principal es crear varios marcos, cada uno representando una «página» o sección diferente de tu aplicación. Todos se colocan dentro de un único marco contenedor, que actúa como el área de visualización principal. Solo un marco es visible en un momento dado.


import tkinter as tk

root = tk.Tk()
root.title("Ejemplo de Cambio de Marco")

# Marco contenedor
container = tk.Frame(root)
container.pack(side="top", fill="both", expand=True)

# Crear marcos
frame1 = tk.Frame(container)
frame2 = tk.Frame(container)

# Colocar marcos (ocultar inicialmente frame2)
frame1.pack(fill="both", expand=True)
frame2.pack(fill="both", expand=True)
frame2.pack_forget()

# Añadir widgets a los marcos
label1 = tk.Label(frame1, text="Este es el Marco 1")
label1.pack(pady=20)

label2 = tk.Label(frame2, text="Este es el Marco 2")
label2.pack(pady=20)

Cambiando Marcos con una Función

Una función gestiona la visibilidad de los marcos. Oculta el marco actualmente visible y luego muestra el marco seleccionado.


def show_frame(frame):
    for f in (frame1, frame2):  # Extender esta lista para más marcos
        if f == frame:
            f.pack(fill="both", expand=True)
        else:
            f.pack_forget()

Aquí hay un ejemplo completo con dos botones de navegación:


import tkinter as tk

root = tk.Tk()
root.title("Ejemplo de Cambio de Marco")

container = tk.Frame(root)
container.pack(side="top", fill="both", expand=True)

frame1 = tk.Frame(container)
frame2 = tk.Frame(container)

frame1.pack(fill="both", expand=True)
frame2.pack(fill="both", expand=True)
frame2.pack_forget()

label1 = tk.Label(frame1, text="Este es el Marco 1")
label1.pack(pady=20)

label2 = tk.Label(frame2, text="Este es el Marco 2")
label2.pack(pady=20)

def show_frame(frame):
    for f in (frame1, frame2):
        if f == frame:
            f.pack(fill="both", expand=True)
        else:
            f.pack_forget()

button1 = tk.Button(root, text="Ir al Marco 1", command=lambda: show_frame(frame1))
button1.pack()

button2 = tk.Button(root, text="Ir al Marco 2", command=lambda: show_frame(frame2))
button2.pack()

root.mainloop()

Mejorando tu IU

Este es un framework básico. Considera estas mejoras:

  • Más Marcos: Añade más marcos y actualiza la función show_frame según corresponda.
  • Gestores de Diseño: Explora grid o place para diseños más complejos.
  • Estilo: Usa temas, colores y widgets personalizados para mejorar el atractivo visual.
  • Enlazado de Datos: Usa variables para actualizar dinámicamente el contenido del marco.
  • Manejo de Errores: Implementa un manejo de errores robusto para una aplicación más estable.

Este método ofrece una forma limpia de gestionar múltiples vistas en tu aplicación Tkinter, simulando eficazmente el cambio de marco.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *