2012-05-04 100 views
15

Según tengo entendido, después de inicializar todos los marcos y widgets en el método __init__, la ventana de tkinter se redimensiona para ajustarse a todos estos componentes.¿Cómo configuro un tamaño de ventana mínimo en tkinter?

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 para comenzar a ocultar widgets.

¿Cómo puedo lograr esto?

+0

¿Está diciendo que desea restringir al usuario para que no reduzca la ventana? ¿Tienes literalmente tantos widgets que algunos se cortan, o es un problema de diseño en el que las cosas se cortan tal vez incorrectamente (es decir, una barra de desplazamiento que desaparece en lugar de un artilugio de texto que se encoge)? –

Respuesta

27

También puede forzar una actualización de inmediato sin introducir su mainloop, mediante el uso de 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 tkinterbook effbot:

Procesa todos los eventos pendientes, devoluciones de llamadas de eventos, completa cualquier pendiente de gestión de la geometría, vuelve a crear widgets según sea necesario y llama a todas las tareas inactivas pendientes. Este método se debe usar con cuidado, ya que puede conducir a condiciones de carrera realmente desagradables si se llama desde el lugar incorrecto (desde una devolución de llamada de evento, por ejemplo, o desde una función que puede llamarse de algún modo desde un evento devolución de llamada, etc.). Cuando en duda, use update_idletasks en su lugar.

Lo he usado mucho mientras me metía tratando de descubrir cómo hacer cosas como obtener el tamaño/posición de los widgets antes de saltar al lazo principal.

+0

Esto es mucho más limpio que mi respuesta. ¡Gracias! –

+0

¡Hola, el experto en Python! Consulte http://stackoverflow.com/questions/23022005/python-tkinter-tree-selection –

2

lo he descubierto:

def __init__(self, master): 
    ... 
    self.master.update_idletasks() 
    self.master.after_idle(lambda: self.master.minsize(self.master.winfo_width(), self.master.winfo_height())) 
-3
root = Tk() 

Como se ha creado la ventana raíz. La ventana raíz es una ventana principal de la aplicación en nuestros programas. Tiene una barra de título y bordes. Estos son provistos por el administrador de ventanas. Debe ser creado antes que cualquier otro widget.

root.geometry("250x150+300+300") 

El geometría() método establece un tamaño para la ventana y posiciones en la pantalla. Los primeros dos parámetros son ancho y alto de la ventana. Los dos últimos parámetros son coordenadas de pantalla x, y.

app = Example(root) 

Aquí creamos la instancia de la clase de aplicación.

root.mainloop() 

Finalmente, entramos en el carril principal. El manejo del evento comienza desde este punto. El enlace principal recibe eventos del sistema de ventanas y los envía a los widgets de la aplicación. Finaliza cuando hacemos clic en el botón Cerrar de la barra de título o llamamos al método quit().

enter image description here

Espero que hayas encontrado este artículo útil.

+0

Esto no parece responder a la pregunta en absoluto. ¿Qué tiene que ver tu respuesta con establecer el tamaño mínimo de una ventana? –

+0

No hay una sola función mágica para forzar un marco a un tamaño mínimo o fijo. Sin embargo, puedes forzar el tamaño de un marco al darle un ancho y alto. – miksiii

4

Sé que esta pregunta es viejo, pero aquí es otra manera:

root = Tk() 
root.minsize(foo, bar) 

root.minsize() establece el tamaño mínimo de las ventanas para foo y barra, donde foo y bar son el ancho y alto de la ventana, respectivamente.

Su debe, sin embargo poner este código antes de su mainloop.

+0

No es verdad que DEBES poner ese código antes de tu mainloop. –

Cuestiones relacionadas