toplevel - ventana emergente tkinter
¿Cómo configuro un tamaño mínimo de ventana en tkinter? (4)
Mi entendimiento es que después de inicializar todos los marcos y widgets en el método __init__
, la ventana tkinter cambia de tamaño para adaptarse a todos estos componentes.
Me gustaría establecer que el tamaño inicializado de la ventana sea su tamaño mínimo. Quiero poder maximizar y escalar la ventana más grande, pero nunca quiero que la ventana sea lo suficientemente pequeña como para comenzar a ocultar los widgets.
¿Cómo logro esto?
Me lo imaginé:
def __init__(self, master):
...
self.master.update_idletasks()
self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height()))
Sé que esta pregunta es antigua, pero aquí hay otra manera:
root = Tk()
root.minsize(foo, bar)
root.minsize () establece el tamaño mínimo de las ventanas en foo y bar , donde foo y bar son el ancho y el alto de la ventana, respectivamente.
Sin embargo, debe ejecutar este código antes de que Mainloop termine de ejecutarse. Sólo tendrá efecto después de que se llame el comando.
También puede forzar una actualización de inmediato sin ingresar a su mainloop, usando algo como esto:
root = Tk()
# set up widgets here, do your grid/pack/place
# root.geometry() will return ''1x1+0+0'' here
root.update()
# now root.geometry() returns valid size/placement
root.minsize(root.winfo_width(), root.winfo_height())
Descripción de update() en effbot tkinterbook:
Procesa todos los eventos pendientes, llama a devoluciones de llamadas de eventos, completa cualquier gestión de geometría pendiente, vuelve a dibujar widgets según sea necesario y llama a todas las tareas inactivas pendientes. Este método debe usarse con cuidado, ya que puede llevar a condiciones de carrera realmente desagradables si se llama desde un lugar equivocado (desde dentro de una devolución de llamada de evento, por ejemplo, o desde una función que puede llamarse desde cualquier llamada de evento, etc. .). En caso de duda, utilice update_idletasks en su lugar.
Lo he usado bastante mientras me meto en problemas para tratar de averiguar cómo hacer cosas como obtener el tamaño / posición de los widgets antes de saltar al bucle principal.
root = Tk()
Desde la ventana raíz se crea. La ventana raíz es una ventana de aplicación principal en nuestros programas. Tiene una barra de título y bordes. Estos son proporcionados por el gestor de ventanas. Debe ser creado antes que cualquier otro widget.
root.geometry("250x150+300+300")
El método de geometría () establece un tamaño para la ventana y lo coloca en la pantalla. Los dos primeros parámetros son el ancho y el alto de la ventana. Los dos últimos parámetros son x, y coordenadas de pantalla.
app = Example(root)
Aquí creamos la instancia de la clase de aplicación.
root.mainloop()
Finalmente, entramos en el mainloop. El manejo del evento comienza desde este punto. El mainloop recibe eventos del sistema de ventanas y los envía a los widgets de la aplicación. Se termina cuando hacemos clic en el botón de cerrar de la barra de título o llamamos al método quit ().
Espero que hayas encontrado esto útil.