Как предотвратить сжатие Tkinter Frame в соответствии с его содержимым?

StackOverflow https://stackoverflow.com/questions/563827

  •  05-09-2019
  •  | 
  •  

Вопрос

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

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) являются чрезвычайно мощными.Научитесь пользоваться этой силой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top