Как остановить Tkinter Frame от сжатия, чтобы соответствовать его содержанию? - PullRequest
36 голосов
/ 19 февраля 2009

Это код, который доставляет мне неприятности.

f = Frame(root, width=1000, bg="blue")
f.pack(fill=X, expand=True)

l = Label(f, text="hi", width=10, bg="red", fg="white")
l.pack()

Если я закомментирую строки с меткой, рамка отобразится с правильной шириной. Однако добавление метки, похоже, уменьшает рамку до размера метки. Есть ли способ предотвратить это?

1 Ответ

52 голосов
/ 19 февраля 2009

По умолчанию tk фреймы уменьшаются или увеличиваются, чтобы соответствовать их содержимому , что вам нужно в 99% случаев. Термин, который описывает эту особенность, является «распространением геометрии». Существует команда для включения или выключения распространения геометрии при использовании pack аналогичная для grid).

Поскольку вы используете пакет, синтаксис будет:

f.pack_propagate(0)

или, может быть, root.pack_propagate(0), в зависимости от того, на какие виджеты вы действительно хотите воздействовать. Однако, поскольку вы не указали высоту кадра, высота по умолчанию составляет 1 пиксель, поэтому вы все равно можете не увидеть внутренние виджеты. Чтобы получить полный эффект от того, что вы хотите, вам нужно дать вмещающей рамке ширину и высоту.

При этом в большинстве случаев вы должны позволить tkinter вычислить размер. Когда вы выключаете распространение геометрии, ваш графический интерфейс плохо реагирует на изменения в разрешении, на изменения шрифтов и т. Д. Менеджеры геометрии tkinter (pack, place и grid) являются чрезвычайно мощными. Научитесь использовать эту силу.

...