Nuevas ventanas con Toplevel() - Tkinter desde cero - Capítulo 15


Crear nuevas ventanas en Tkinter

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():

Código

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()

Resultado

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.

Código

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)

Resultado

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 proposito es dar la opción de eliminarla o cerrarla gracias al destroy

Código

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.

Resultado

Ventanas nuevas con Toplevel() en Tkinter

Ahora, una vez pulsado el botón, con la llamada a la función, nos aparecen dos nuevos botones, Cerrar ventana y Cerrar ventana principal.


Suscríbete a mi canal de YouTube para apoyarme

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.


Comentarios

Si te quedan dudas sobre el temario, sobre Python, 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.