Каждый виджет, кроме окна, располагается в определенном родительском контейнере. Например:
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("250x200")
lbl = ttk.Label(text="Hello")
lbl.pack()
root.mainloop()
Здесь для метки lbl контейнером выступает главное окно - root. Однако графическое приложение может иметь более сложную структуру со множеством вложенных контейнеров. И для каждого виджета можно явным образом установить контейнер с помощью первого параметра конструктора, который называться master(и нет ни подземелья). Например, в примере выше мы могли бы явным образом прописать для Label родительский контейнер:
lbl = ttk.Label(master=root, text="Hello")
# или так
lbl = ttk.Label(root, text="Hello")
В данном случае это не имеет смысла, кнопка по умолчанию добавляется в окно. Однако также мы можем определять вложенные контейнеры. В частности, для в Tkinter предназначен виджет Frame.
Frame отображает прямоугольник и обычно применяется для организации интерфейса в отдельные блоки. Некоторые основные параметры, которые мы можем установить через конструктор класса Frame:
Используем фреймы:
import re
from tkinter import *
from tkinter import ttk
root = Tk()
root.geometry("250x200")
frame = ttk.Frame(borderwidth=1, relief=SOLID, padding=[8, 10])
name_label = ttk.Label(frame, text="Введите имя")
name_label.pack(anchor=NW)
name_entry = ttk.Entry(frame)
name_entry.pack(anchor=NW)
frame.pack(anchor=NW, fill=X, padx=5, pady=5)
root.mainloop()
Здесь фрейм имеет границу толщиной в 1 пиксель. Граница представляет обычную линию (relief=SOLID
). Также для фрейма заданы внутренние отступы: 8 по горизонтали и 10 по вертикали. Для установки отступов можно использовать следующие формы:
padding=10 # устанавливает общий доступ в 10 единиц
padding=[8, 10] # отступ по горизонтали - 8, отступ по вертикали - 10
padding=[8, 10, 6, 5] # отступ слева 8, сверху - 10, справа - 6 и снизу 5
В сам фрейм добавляется два других виджета: Label и Entry. Для этого для обоих виджетов указываем фрейм в качестве родительского контейнера.