Tkinter Creación de varias ventanas: ¿usar una nueva instancia de Tk o Toplevel o Frame?

Estoy empezando a aprender Tkinter y he estado creando nuevas ventanas con nuevas instancias de Tk cada vez. Acabo de leer que no era una buena práctica. Si es así, ¿por qué? ¿Y cómo podría hacerse esto mejor? He visto a otros crear ventanas con instancias de Toplevel y Frame. ¿Cuáles son los beneficios / inconvenientes de usar estos en su lugar?

En caso de que esto haga una diferencia: la aplicación para la que estoy escribiendo el código comienza con una ventana de inicio de sesión y luego pasa a una segunda ventana cuando la contraseña ingresada es correcta.

Cada progtwig tkinter necesita exactamente una instancia de Tk . Tkinter es una envoltura alrededor de un intérprete tcl incrustado. Cada instancia de Tk obtiene su propia copia del intérprete, por lo que dos instancias de Tk tienen dos espacios de nombres diferentes.

Si necesita varias ventanas, cree una instancia de Tk y luego las ventanas adicionales deberían ser instancias de Toplevel .

Si bien puede crear, destruir y volver a crear una ventana raíz, realmente no tiene sentido. En su lugar, cree la ventana raíz para la pantalla de inicio de sesión, y luego simplemente elimine los widgets de la pantalla de inicio de sesión y reemplácelos con su segunda ventana.

Esto se vuelve trivial si convierte a cada una de sus “ventanas” en una clase separada que hereda de tk.Frame . Debido a que tkinter destruirá todos los widgets secundarios cuando se destruye un marco, es fácil cambiar de una “ventana” a otra. Cree una instancia de LoginFrame y LoginFrame en la ventana raíz. Cuando hayan ingresado una contraseña correcta, destruya esa instancia, cree una instancia de MainWindow y MainWindow .