Как предотвратить сжатие Tkinter Frame в соответствии с его содержимым?
Вопрос
Это код, который доставляет мне проблемы.
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()
Если я закомментирую строки с помощью метки, рамка будет отображаться с правильной шириной.Однако добавление метки, похоже, сжимает фрейм до размера метки.Есть ли способ предотвратить это?
Решение
По умолчанию тк фреймы сжиматься или увеличиваться в соответствии с их содержимым, а это то, что вам нужно в 99% случаев.Термин, описывающий эту особенность, — «распространение геометрии».Eсть команда чтобы включить или выключить распространение геометрии при использовании pack
(и похожий для grid
).
Поскольку вы используете пакет, синтаксис будет следующим:
f.pack_propagate(0)
или, может быть root.pack_propagate(0)
, в зависимости от того, на какие виджеты вы действительно хотите повлиять.Однако, поскольку вы не указали высоту кадра, ее высота по умолчанию составляет 1 пиксель, поэтому вы все равно можете не видеть внутренние виджеты.Чтобы получить полный эффект того, что вы хотите, вам нужно указать содержащему фрейму ширину и высоту.
При этом в большинстве случаев вы должны позволить tkinter вычислить размер.Когда вы отключите распространение геометрии, ваш графический интерфейс не будет хорошо реагировать на изменения разрешения, изменения шрифтов и т. д.менеджеры геометрии tkinter (pack
, place
и grid
) являются чрезвычайно мощными.Научитесь пользоваться этой силой.