standard libreria library instalar formularios examples descargar con como python tkinter tcl tk

python - libreria - ¿Por qué se desalientan las instancias múltiples de Tk?



tkinter examples (2)

¿Por qué se considera malo tener múltiples instancias de Tk ?

Tkinter es solo un contenedor de Python alrededor de un intérprete Tcl incorporado que importa la biblioteca Tk. Cuando crea una ventana raíz, crea una instancia de un intérprete Tcl.

Cada intérprete de Tcl es una caja de arena aislada. Un objeto en un sandbox no puede interactuar con objetos en otro. La manifestación más común de eso es que un StringVar creado en un intérprete no es visible en otro. Lo mismo ocurre con los widgets: no puede crear widgets en un intérprete que tenga como widget principal en otro intérprete.

Desde un punto de vista técnico, no hay ninguna razón por la que no pueda tener dos instancias de Tk al mismo tiempo. La recomendación en contra es porque rara vez existe la necesidad real de tener dos o más intérpretes de Tcl distintos, y causa problemas que son difíciles de entender para los principiantes.

¿El segundo fragmento se considera un poco mejor o sufre las mismas condiciones que el primer código?

Es imposible decir si el segundo ejemplo en la pregunta es mejor o no sin saber lo que está tratando de lograr. Probablemente no sea mejor ya que, nuevamente, rara vez hay un momento en el que realmente necesites dos instancias.

La mejor solución el 99.9% del tiempo es crear exactamente una instancia de Tk que use durante la vida de su programa. En pocas palabras, así es como tkinter y el intérprete Tcl / Tk subyacente fueron diseñados para ser utilizados.

Considere el siguiente ejemplo:

import tkinter as tk root = tk.Tk() root.title("root") other_window = tk.Tk() other_window.title("other_window") root.mainloop()

y también vea el siguiente ejemplo que crea instancias de Tk consecutivas en lugar de a la vez, por lo que hay exactamente una instancia de Tk en un momento dado:

import tkinter as tk def create_window(window_to_be_closed=None): if window_to_be_closed: window_to_be_closed.destroy() window = tk.Tk() tk.Button(window, text="Quit", command=lambda arg=window : create_window(arg)).pack() window.mainloop() create_window()

  • ¿Por qué se considera malo tener múltiples instancias de Tk ?
  • ¿El segundo fragmento se considera un poco mejor o sufre las mismas condiciones que el primer código?

La mejor referencia que he encontrado hasta ahora es esta sección en el tkinterbook .

En los ejemplos simples que hemos usado hasta aquí, solo hay una ventana en la pantalla; La ventana raíz. Esto se crea automáticamente cuando llama al constructor Tk

y

Si necesita crear ventanas adicionales, puede usar el widget Toplevel . Simplemente crea una nueva ventana en la pantalla, una ventana que se ve y se comporta más o menos como la ventana raíz original

Mi opinión sobre esto es que una instancia de Tk crea un widget Toplevel , además de cosas como mainloop , de las cuales solo debería haber uno.