Propagación de tamaño del administrador de geometría de cuadrícula Tkinter (con adhesivo)

StackOverflow https://stackoverflow.com/questions/1441134

  •  10-07-2019
  •  | 
  •  

Pregunta

Me falta algo sobre cómo se propagan los tamaños en Tk. Prueba esto:

from Tkinter import *

root = Tk()

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)
frame2 = Frame(root, border=4, relief=RIDGE)
frame2.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame2, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

root.mainloop()

etiqueta1 está dentro del marco1, y etiqueta2 está dentro del marco2. label1 sale más angosto que label2, como se ve en el fondo blanco. Pero frame1 y frame2 tienen el mismo ancho, como se ve por sus bordes. Pensé que la adherencia expandiría label1 para tener el mismo ancho que su padre.

Si pongo label1 y label2 dentro del mismo marco, entonces label1 sale tan ancho como label2:

frame1 = Frame(root, border=4, relief=RIDGE)
frame1.grid(sticky=E+W)

label1 = Label(frame1, text='short', background='white')
label1.grid(sticky=E+W)
label2 = Label(frame1, text='quite a bit longer', background='white')
label2.grid(sticky=E+W)

¿Qué me estoy perdiendo? En la vida real, tengo algunos marcos anidados apilados que no se expanden como me gustaría.

Gracias Dan

¿Fue útil?

Solución

Las filas y columnas tienen " peso " que describe cómo crecen o se reducen para llenar espacio adicional en el maestro. Por defecto, una fila o columna tiene un peso de cero, lo que significa que le ha dicho a la etiqueta que llene la columna pero no le ha dicho a la columna que llene el marco maestro.

Para solucionar esto, asigne un peso a la columna. Cualquier número entero positivo hará en este caso específico:

frame1.columnconfigure(0, weight=1)
frame2.columnconfigure(0, weight=1)

Para obtener más información sobre grid , con ejemplos en ruby, tcl, perl y python, consulte la página de cuadrícula en tkdocs.com

Otros consejos

Esta solución con columnas y marcos funciona, pero para que las etiquetas tengan el mismo ancho en una cuadrícula, no necesita los marcos adjuntos. Vea el ejemplo a continuación

from tkinter import *

root = Tk()

label1 = Label(root, text='short', bg='light green', relief=RIDGE)
label1.grid(sticky=E+W)
label2 = Label(root, text='quite a bit longer', bg='light green', relief=RIDGE)
label2.grid(sticky=E+W)

root.mainloop()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top