Глава 16 · Создаём классные приложения с Tkinter
pack подробно: fill, expand и вложенные фреймы
pack — это не просто «сверху вниз»: у него есть управление свободным пространством.
pack: как распределяется пространство
side определяет, с какой стороны укладывается очередной
виджет, fill — растягивать ли его на всю доступную ширину/высоту,
а expand — забирать ли ему лишнее свободное место:
| Параметр | Значение | Эффект |
|---|---|---|
| fill | "x" | растянуть виджет по ширине выделенной ему полосы |
| fill | "y" | растянуть виджет по высоте выделенной ему полосы |
| fill | "both" | растянуть и по ширине, и по высоте |
| expand | True | отдать виджету дополнительное свободное место контейнера |
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
Практика выполняется локально