2015-10-25 4 views
0

Не следует ли расширять «одну метку», чтобы занять полную ширину (минус заполнение) столбца? Это не для меня (OS X 10.9.5); она всегда оказывается оправданной левый и занимающий свою естественную ширину:Проблемы с сеткой Tkinter

from Tkinter import * 

root = Tk() 
root.configure(background='black') 

frame = Frame(root, bg='red', takefocus=0) 
frame.pack() 

l0 = Frame(frame, bg='blue') 
l0.grid(row=0, sticky=W+E) 
l0x=Label(l0,text='One Label', takefocus=1) 
l0x.grid(padx=2, pady=2, sticky=W+E) 

l1 = Frame(frame, bg='yellow') 
l1.grid(row=1, sticky=W+E) 
l1x=Label(l1,text='Another Label', takefocus=1) 
l1x.grid(padx=2, pady=(0,2), sticky=W+E) 

root.mainloop() 

ответ

1

Да, метка делает подходит всю ширину столбца. Проблема в том, что столбец не соответствует всей ширине содержащего фрейма.

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

Быстрое исправление, чтобы убедиться, что столбец нулевой каждой внутренней рамы имеет ненулевой вес:

l0.grid_columnconfigure(0, weight=1) 
l1.grid_columnconfigure(0, weight=1) 

Есть аналогичные проблемы со всеми своими кадрами, но решение является тем же самым в каждом если вы используете grid.

Как правило, в любом конкретном контейнере (обычно в кадре или в корневом окне), по меньшей мере, один ряд и столбец должны иметь вес 1.