2015-02-13 6 views
0

Это моя первая встреча с Tkinter, и я бил головой о стену над этим.Рамка Tkinter не заполняет оставшееся пространство

В конечном счете, мне нужен макет, который использует рамку вдоль левого края, содержащую стек кнопок (навигация). Это должно быть жестко закреплено до 100 пикселей в ширину и занимать все вертикальное пространство. Остальная часть окна должна быть заполнена содержимым Frame, содержимое которого я буду менять динамически.

Итак, должно быть просто. Вот упрощенная версия того, что у меня есть (цветные для справки):

from Tkinter import * 

root = Tk() 
root.geometry("300x200") 

navbar = Frame(root, bg="green", width=100) 
navbar.pack(anchor=W, fill=Y, expand=True, side=LEFT) 

content_frame = Frame(root, bg="orange") 
content_frame.pack(anchor=N, fill=BOTH, expand=True, side=LEFT) 

root.mainloop() 

Что я ожидал увидеть зеленый бар (100 точек в ширину) на левой стороне окна (полная высота), а остальная часть окна оранжевая. Однако я получаю ирландский флаг (зеленый, белый, оранжевый).

Независимо от того, что я делаю, оранжевый content_frame просто отказывается заполнить горизонтально. Кажется, что Tk разделил окно ровно пополам, разместив зеленую навигационную панель на левой стороне (как и ожидалось), но при этом оранжевый content_frame будет только половиной оставшегося пространства.

Я могу заставить оранжевый заполнить пробел, закодировав его, в этом случае шириной = 200, но это не сгибается при изменении размера окна. Кроме того, если я не добавляю зеленый навигатор, оранжевый content_frame с удовольствием заполняет все окно.

Этот пример кода показывает content_frame с anchor = N, но не имеет значения, где я его привязываю. Также не имеет значения, будет ли я стороной = ЛЕВАЯ или боковая = ПРАВО.

Я также обнаружил, что независимо от того, как я меняю ширину зеленого навигатора, Tk всегда разделяет оставшееся горизонтальное пространство пополам и помещает оранжевый content_frame в правую половину.

Это должно быть просто. Есть идеи?

+0

Я запустить свой код, и это, кажется, работает. [Screenshoit] (http://i.imgur.com/aCZMhmC.png). Можете ли вы опубликовать свой скриншот, чтобы мы знали, что вы не работаете. – Marcin

+0

Я случайно остался в жестко запрограммированной ширине = 200 для content_frame. Это заставляет его работать корректно, пока вы не измените размер окна и не увидите, что он не сгибается, но остается жестко закодированным до 200 пикселей в ширину. Я редактировал код, чтобы лучше проиллюстрировать проблему. Вот что я вижу: [link] (http://i.imgur.com/NREA0Nr.png) – Foswick

ответ

2

указать expand=False для левого кадра:

from Tkinter import * 

root = Tk() 
root.geometry("300x200") 

navbar = Frame(root, bg="green", width=100) 
navbar.pack(anchor=W, fill=Y, expand=False, side=LEFT) # <---- 

content_frame = Frame(root, bg="orange") 
content_frame.pack(anchor=N, fill=BOTH, expand=True, side=LEFT) 

root.mainloop() 
+0

Блестящий! Работает отлично. Не совсем уверен, почему он это делает, но он это делает. По крайней мере, это показывает мне, где мне нужно читать, чтобы узнать почему. Спасибо! – Foswick

Смежные вопросы