Pergunta

Eu estou faltando alguma coisa sobre como tamanhos propagam em Tk. Tente isto:

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()

label1 está dentro frame1 e label2 é frame2 dentro. label1 sai mais estreito do que label2, como visto pelo fundo branco. Mas frame1 e frame2 são a mesma largura, como visto por suas fronteiras. Eu pensei que a viscosidade iria expandir label1 para ter a mesma largura como seu pai.

Se eu colocar label1 e label2 dentro do mesmo quadro, em seguida, label1 sai tão grande 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)

O que eu estou ausente? Na vida real, eu tenho alguns quadros aninhados empilhados que não estão em expansão como eu gostaria.

Obrigado, Dan

Foi útil?

Solução

Linhas e colunas têm "peso" que descreve como eles crescem ou encolhem para preencher o espaço extra no mestre. Por padrão, uma linha ou coluna tem um peso de zero, o que significa que você disse o rótulo para preencher a coluna, mas você não disse a coluna para preencher o quadro mestre.

Para corrigir isso, dar a coluna um peso. Qualquer inteiro positivo vai fazer neste caso específico:

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

Para mais informações sobre grid, com exemplos em rubi, TCL, perl e python, consulte a grade página em tkdocs.com

Outras dicas

Esta solução com colunas e molduras obras, mas para obter rótulos para ter a mesma largura em uma grade, você não precisa os quadros que encerram. Veja abaixo exemplo

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top