Crear ventanas multiples con Tkinter Python

En el siguiente post titulado Crear ventanas multiples con Tkinter Python te voy a mostra como crea varias en ventanas en Tkinter y así generar mejores interfaces de usuario.

Crear ventanas multiples con Tkinter Python

Tkinter Toplevel Window

En Tkinter de Python, la instacia Tk representa la pantalla principal de la aplicación que se crea, por lo cual es necesario requerir a otros métodos para crea diferentes pantallas en nuestro programa. Para crear las ventanas que necesitemos sin importar el número, vamos a usar top-level windows.

Primero, creamos una instancia con la clase Toplevel , y cuyo parent va a ser la raiz de la app.

ventana = tk.Toplevel(root)

Con el código anterior hemos creado una ventana en la cual vamos a añadir algunos widgets como por ejemplo: botones, cajas de texto o imagenes.

Una de las cosas más importamte es evitar que la interacción con la pantalla principal mientras hacemos uso de las pantallas secundarias. Para ello tenemos que usar grab_set() que se encarga de prevenir eventos con la pantalla princiapl. Esto es útil para crear ventanas de diálogo o ventanas emergentes que requieren la atención del usuario antes de continuar con otras acciones en la aplicación. Para desactivar la modalidad, puedes usar ventana.grab_release().

ventana.grab_set()

A continuación te muestro un ejemplo de como quedaría una interaz sencilla en Tkinter que crea una ventana secundaria.

import tkinter as tk

def segunda_ventana():
    ventana_modal = tk.Toplevel(root)
    ventana_modal.title("Segunda Ventana")
    
    label = tk.Label(ventana_modal, text="Esta es una ventana modal de ejemplo.")
    label.pack(padx=20, pady=20)
    
    ventana_modal.grab_set()
    
    boton_cerrar = tk.Button(ventana_modal, text="Cerrar", command=ventana_modal.destroy)
    boton_cerrar.pack(padx=20, pady=10)

# Crear la ventana principal
root = tk.Tk()
root.title("Ventana Principal")

# Botón para mostrar la ventana modal
boton_mostrar_modal = tk.Button(root, text="Mostrar Segunda Ventana", command=segunda_ventana)
boton_mostrar_modal.pack(padx=20, pady=20)

root.mainloop()

Con la línea boton_mostrar_modal = tk.Button(root, text="Mostrar Segunda Ventana", command=segunda_ventana) estamos pidiendo a Tkinter que abra una nueva ventana, llamando la función def segunda_ventana() que almacena todos widgets de la segunda ventana.

Como el nombre del post dice Crear ventanas multiples con Tkinter Python, vamos a añadir más ventanas para crear una app funcional y muy fácil de modificar.

Crear editor de notas con Tkinter

Vamos a crear una app con Tkinter Python que nos va permitir crear archivos de notas y luego visualizar los datos guardados en archivos .txt.

Crearemos una pantalla para cada función , una para crear y otra visualizar las notas. Haciendo uso de Toplevel creamos las ventanas, teniendo como base el root.

import tkinter as tk
from tkinter import filedialog

# Función para crear un archivo .txt
def crear_archivo():
    ventana_modal = tk.Toplevel(root)
    ventana_modal.title("Crear Archivo .txt")
    ventana_modal.configure(bg="#EFEFEF")  # Cambiar el color de fondo de la ventana modal

    
    label = tk.Label(ventana_modal, text="Agrega el contenido del archivo:", bg="#EFEFEF")  # Cambiar el color de fondo de la etiqueta
    label.pack(padx=20, pady=10)

    contenido_text = tk.Text(ventana_modal, wrap=tk.WORD, width=40, height=10)
    contenido_text.pack(padx=20, pady=10)

    # Función para guardar el contenido en un archivo .txt
    def guardar_contenido():
        contenido = contenido_text.get("1.0", tk.END)  # Obtiene el contenido de la caja de texto
        file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Archivos de texto", "*.txt")])
        if file_path:
            with open(file_path, "w") as file:
                file.write(contenido)
            ventana_modal.destroy()

    # Botón para guardar el contenido en un archivo
    boton_guardar = tk.Button(ventana_modal, text="Guardar", command=guardar_contenido, bg="#4CAF50", fg="white")  # Cambiar el color de fondo y el color del texto del botón
    boton_guardar.pack(padx=20, pady=10)

# Función para visualizar un archivo .txt
def visualizar_archivo():
    file_path = filedialog.askopenfilename(filetypes=[("Archivos de texto", "*.txt")])
    if file_path:
        with open(file_path, "r") as file:
            contenido = file.read()
            mostrar_contenido(contenido)

# Función para mostrar el contenido del archivo en una nueva ventana modal
def mostrar_contenido(contenido):
    ventana_modal = tk.Toplevel(root)
    ventana_modal.title("Contenido del Archivo")
    ventana_modal.configure(bg="#EFEFEF")  # Cambiar el color de fondo de la ventana modal

    label = tk.Label(ventana_modal, text=contenido, bg="#EFEFEF")  # Cambiar el color de fondo de la etiqueta
    label.pack(padx=20, pady=20)

# Crear la ventana principal
root = tk.Tk()
root.title("Gestión de Archivos .txt")
root.configure(bg="#EFEFEF")  # Cambiar el color de fondo de la ventana principal

# Botón para crear un archivo .txt
boton_crear_archivo = tk.Button(root, text="Crear Archivo .txt", command=crear_archivo, bg="#4CAF50", fg="white")  # Cambiar el color de fondo y el color del texto del botón
boton_crear_archivo.pack(padx=20, pady=20)

# Botón para visualizar un archivo .txt
boton_visualizar_archivo = tk.Button(root, text="Visualizar Archivo .txt", command=visualizar_archivo, bg="#008CBA", fg="white")  # Cambiar el color de fondo y el color del texto del botón
boton_visualizar_archivo.pack(padx=20, pady=20)

root.mainloop()

Los ejemplos que he publicado nos permiten crear ventanas multiples con Tkinter Python para un mejor diseño en las aplicaciones.

Artículo Anterior Artículo Siguiente