2009-02-19 11 views
30

Este es el código que me está causando problemas.¿Cómo detener la reducción de Tkinter Frame para que se ajuste a su contenido?

f = Frame(root, width=1000, bg="blue") 
f.pack(fill=X, expand=True) 

l = Label(f, text="hi", width=10, bg="red", fg="white") 
l.pack() 

Si comente las líneas con la etiqueta, el recuadro se muestra con el ancho correcto. Sin embargo, agregar la etiqueta parece reducir el marco hasta el tamaño de la etiqueta. ¿Hay alguna manera de evitar que eso suceda?

Respuesta

43

De forma predeterminada, las tramas tk se contraen o crecen para ajustarse a sus contenidos, que es lo que desea el 99% del tiempo. El término que describe esta característica es "propagación de geometría". Hay un command para activar o desactivar la propagación de geometría cuando se utiliza pack (y similar one para grid).

dado que está utilizando el paquete, la sintaxis sería:

f.pack_propagate(0) 

o tal vez root.pack_propagate(0), dependiendo de qué widgets (s) en realidad se desea afectar.

Dicho esto, la gran mayoría de las veces debe dejar que tkinter calcule el tamaño. Cuando desactivas la propagación de la geometría, tu GUI no responderá bien a los cambios en la resolución, los cambios en las fuentes, etc. Los gerentes de geometría de tkinter (pack, place y grid) son notablemente potentes. Aprende a aprovechar ese poder.

+1

También podría ser 'self.pack_propagate (0)' si se hace en un método como '__init __()' de una clase de widget derivada de 'Frame' - como en la' clase Application (Frame) comúnmente utilizada: 'idiom' – martineau

+0

El primer ejemplo no funciona para mí. La ventana tiene el tamaño correcto, pero los widgets no son visibles en la pantalla. El segundo ejemplo funciona para mí ¡todo se muestra bien en la pantalla con el ancho/alto dados! +1 – Bas

+0

@Bas: en el ejemplo original, la "altura" del fotograma no se pasa y el valor predeterminado es 0, por lo que cuando la propagación se desactiva, la altura permanece en 0 y no se ve la etiqueta. Tendría que establecer la Altura del cuadro = 20 o algo así a lo largo de esas líneas para ver la Etiqueta. – Gary02127

Cuestiones relacionadas