
Ventanas secundarias TopLevel() de Tkinter
Capítulo 15: Nuevas ventanas con Toplevel()
En este capítulo vamos a ver cómo crear nuevas ventanas. Hasta ahora solo utilizábamos la ventana principal.
Para crear una ventana nueva lo podemos hacer con Toplevel()
:
Especificamos la nueva ventana y le podemos dar unas propiedades como a la ventana principal.
from tkinter import *
root = Tk()
root.title("Ventana principal")
root.geometry("300x100")
ventana_nueva1 = Toplevel()
ventana_nueva1.geometry("300x200")
ventana_nueva1.title("Ventana secundaria")
mainloop()

Como ocurría con LabelFrame()
cada ventana, tiene su propio grid()
. A partir de aquí, ya puedes empezar a utilizar todo lo visto hasta ahora con las nuevas ventanas.
Veamos algo nuevo, cómo comunicar las dos ventanas que acabo de crear, es decir, que interactúen de alguna manera.
En la ventana principal ponemos un Entry()
y un botón para enviar un string que se muestre en la nueva ventana.
En este código, lo que hago es crear un simple Entry()
en la ventana principal y un botón que va a enviar los datos introducidos.
Los datos son enviados gracias a la función envia_boton
a la segunda ventana, la cual se crea con la misma función en el momento de la llamada.
entrada = Entry(root, width=35)
entrada.grid(row=0)
def envia_boton():
ventana_nueva1 = Toplevel()
ventana_nueva1.geometry("400x200")
ventana_nueva1.title("Ventana secundaria")
valor_entrada = entrada.get()
etiqueta = Label(ventana_nueva1,
text="El valor introducido en la ventana principal es: " + valor_entrada).grid(row=0)
envia = Button(root, text="Enviar", command=envia_boton).grid(row=1)

Destruir o eliminar ventanas en Tkinter
Podemos destruir o eliminar las nuevas ventanas. Voy a añadirle a la función envia_boton()
un nuevo botón que se creará solo cuando se cree la nueva ventana, y su propósito es dar la opción de eliminarla o cerrarla gracias al destroy
cerrar_ventana = Button(root, text="Cerrar la ventana", command=ventana_nueva1.destroy).grid(row=2)
Además, podemos hacer un destroy
a la ventana principal, lo que hará que el programa finalice con todas sus ventanas secundarias. Para ello, en el command, cambia ventana_nueva1
por root
, si estás escribiendo el código tal cuál lo hago yo.

Comentarios
Si te quedan dudas sobre el temario, sobre Tkinter, o cualquier otra cosa relacionada o simplemente quieres agradecer, aquí tienes tu sitio para dejar tu granito de arena. Gracias por tus comentarios y por darle vida a este sitio web.