En esta ocasión, pasamos a ver el manejo de múltiples ventanas secundarias TopLevel con Tkinter y CustomTkinter.


Voy a enseñar a hacerlo con ambas bibliotecas, puesto que estoy seguro de que hay quien quiere saber esto con Tkinter.

Este capítulo es necesario antes de continuar con el proyecto, ya que necesitamos conocer este tema muy bien.

La clase Toplevel de Tkinter

Para trabajar con nuevas ventanas en Tkinter, tenemos disponible la clase Toplevel, la cual, nos ayuda a trabajar fácilmente con múltiples ventanas.

No te olvides de importar Tkinter.

Con esto, creamos una ventana principal.

import tkinter as tk

# Ventana principal
principal = tk.Tk()
principal.title("Primera ventana")
principal.geometry("400x600")

principal.mainloop()

Ahora, vamos a añadir una segunda con Toplevel. Esta no tendrá mainloop. Dependerá de la principal.

# Ventana secundaria
ventana2 = tk.Toplevel()
ventana2.title("Segunda ventana")
ventana2.geometry("600x600")

Por lo tanto, quedará así:

import tkinter as tk

# Ventana principal
principal = tk.Tk()
principal.title("Primera ventana")
principal.geometry("400x600")

# Ventana secundaria
ventana2 = tk.Toplevel()
ventana2.title("Segunda ventana")
ventana2.geometry("600x600")

principal.mainloop()

El resultado, son dos ventanas. Si cierras la principal, se cierra todo. En cambio, si cierras la segunda, la primera sigue funcionando.


ventanas secundarias toplevel de tkinter

Si quieres añadir más, solo tienes que tener en cuenta que el mainloop de la principal, esté abajo del todo. En este caso, el orden de cierre, da igual. La que manda siempre es la que lleva el mainloop.

import tkinter as tk

# Ventana principal
principal = tk.Tk()
principal.title("Primera ventana")
principal.geometry("300x100")

# Segunda ventana
ventana2 = tk.Toplevel()
ventana2.title("Segunda ventana")
ventana2.geometry("300x100")

# tercera ventana
ventana3 = tk.Toplevel()
ventana3.title("Tercera ventana")
ventana3.geometry("300x100")

#cuarta ventana
ventana4 = tk.Toplevel()
ventana4.title("Cuarta ventana")
ventana4.geometry("300x100")

principal.mainloop()

Ventanas secundarias TopLevel con CustomTkinter

Ahora, cambiemos ligeramente el código de Tkinter con las cuatro ventanas para adaptarlo a CustomTkinter.

import customtkinter as ctk

# Ventana principal
principal = ctk.CTk()
principal.title("Primera ventana")
principal.geometry("300x100")

# Segunda ventana
ventana2 = ctk.CTkToplevel()
ventana2.title("Segunda ventana")
ventana2.geometry("300x100")

# Tercera ventana
ventana3 = ctk.CTkToplevel()
ventana3.title("Tercera ventana")
ventana3.geometry("300x100")

# Cuarta ventana
ventana4 = ctk.CTkToplevel()
ventana4.title("Cuarta ventana")
ventana4.geometry("300x100")

principal.mainloop()

Sin embargo, parece ser, que en CustomTkinter, el orden de apilamiento de ventanas va diferente, ya que declaramos de la primera a la última en orden en el código.

La ventana principal queda siempre por defecto arriba del todo, con el foco de la pantalla (ventana activa).

La segunda, se genera y queda atrás. Se genera la tercera y queda encima de la segunda y la cuarta se coloca encima de estas dos:

ventanas secundarias toplevel customtkinter

Con esto, no pasa nada, si no quieres que salgan en este orden, modifica sus posiciones en el código:

import customtkinter as ctk

# Ventana principal
principal = ctk.CTk()
principal.title("Primera ventana")
principal.geometry("300x100")

# Cuarta ventana
ventana4 = ctk.CTkToplevel()
ventana4.title("Cuarta ventana")
ventana4.geometry("300x100")

# Tercera ventana
ventana3 = ctk.CTkToplevel()
ventana3.title("Tercera ventana")
ventana3.geometry("300x100")

# Segunda ventana
ventana2 = ctk.CTkToplevel()
ventana2.title("Segunda ventana")
ventana2.geometry("300x100")

principal.mainloop()
ventanas secundarias ctktoplevel customtkinter

Ahora que ya sabes lo más básico de Toplevel (Tkinter) y CTkToplevel (Custom Tkinter), vamos a ponerlo en práctica en el proyecto de bases de datos. Esto será en el siguiente capítulo.

No te pierdas nada del curso Máster en Python.


Una respuesta a «Ventanas secundarias TopLevel con Tkinter y CustomTkinter»

  1. No aparece el código ni los apuntes de esta lección:
    Bucle autogenerador de BOTONES y DESTRUIR ventanas con Tkinter y CTK – Máster en PYTHON #47
    Estoy siguiendo la lección sin dificultad pero no aparece, quizás esta mal la URL. Saludos.

Deja una respuesta

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

Trending