2009-09-17 3 views
7

Мне не хватает чего-то о том, как размеры распространяются в Tk. Попробуйте следующее:Распространение размера менеджера геометрии сетки Tkinter (с липкой)

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

этикетка1 есть внутри рама1, а этикетка2 внутри рама2. label1 выходит уже, чем label2, как видно на белом фоне. Но frame1 и frame2 имеют ту же ширину, что и их границы. Я думал, что липкость расширит label1 до той же ширины, что и его родитель.

Если я ставлю Label1 и LABEL2 в том же кадре, то label1 выходит так широко, как Метка2:

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) 

Что мне не хватает? В реальной жизни у меня есть несколько сложенных вложенных фреймов, которые не расширяются, как хотелось бы.

Спасибо, Dan

ответ

8

Строки и столбцы имеет «вес», который описывает, как они растут или сжиматься, чтобы заполнить дополнительное пространство в мастере. По умолчанию строка или столбец имеют вес нуля, что означает, что вы сказали ярлыку заполнить столбец, но вы не сказали столбцу заполнить главный кадр.

Чтобы исправить это, придайте колонке вес. Любое целое положительное число будет делать в этом конкретном случае:

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

Для получения дополнительной информации о grid с примерами в рубин, Tcl, Perl и Python см the grid page on tkdocs.com

+0

Спасибо. В реальной программе я попытался добавить вес, без видимого эффекта. Я вернусь и обязательно добавлю их в правильные рамки. –