Curso de TKINTER desde cero

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()
Ventana nueva con Toplevel() en Tkinter

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)
Ventana nueva con Toplevel() en Tkinter

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.

Ventanas nuevas con Toplevel() en Tkinter

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.

Programación Fácil YouTube

Suscríbete

Si te ha gustado este curso y crees que el trabajo merece la pena, te agradeceré eternamente que te suscribas a mi canal de YouTube para apoyarme y que pueda seguir haciendo cursos gratuitos.

Además, si te encanta la programación, tienes un montón más de cursos gratuitos para ver.

No solo eso, podrás participar enviándome comentarios con tus sugerencias para temas específicos o cursos completos o incluso las dudas que tengas y las intentaré ir resolviendo en los cursos que estén todavía abiertos.