Глава 16 · Создаём классные приложения с Tkinter

pack подробно: fill, expand и вложенные фреймы

pack — это не просто «сверху вниз»: у него есть управление свободным пространством.

pack: как распределяется пространство

side определяет, с какой стороны укладывается очередной виджет, fill — растягивать ли его на всю доступную ширину/высоту, а expand — забирать ли ему лишнее свободное место:

ПараметрЗначениеЭффект
fill"x"растянуть виджет по ширине выделенной ему полосы
fill"y"растянуть виджет по высоте выделенной ему полосы
fill"both"растянуть и по ширине, и по высоте
expandTrueотдать виджету дополнительное свободное место контейнера
pack_fill_expand.py
ttk.Label(root, text="Верх", background="#E7DEFF").pack(side="top", fill="x")
ttk.Label(root, text="Центр", background="#B9A0FC").pack(side="top", fill="both", expand=True)
ttk.Label(root, text="Низ", background="#E7DEFF").pack(side="bottom", fill="x")
Внешний отступ и внутренний — не одно и то же
padx/pady у .pack(...) — это отступ снаружи виджета, между ним и соседями. Отступ внутри самого виджета (между его рамкой и содержимым) настраивается отдельно — например, через padding= у ttk.Frame.

Вложенные фреймы + pack

vlozhennye_frejmy.py
forma_frame = ttk.Frame(root, padding=10)
forma_frame.pack(fill="x")

ttk.Label(forma_frame, text="Имя:").pack(side="left")
ttk.Entry(forma_frame).pack(side="left", fill="x", expand=True)

Метка прижата слева, а поле ввода забирает всё оставшееся горизонтальное пространство — типичная комбинация side="left" + fill="x" + expand=True для формы «подпись — растягивающееся поле».

Практика: pack с fill и expand
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →