Розміщення Pack
Для позиціонування віджетів у контейнері застосовуються різні способи. Один з них представляє виклик віджету методу pack(). Цей метод приймає такі параметри:
expand: якщо рівно True, то віджет заповнює весь простір контейнера.
fill: визначає, чи віджет буде розтягуватися, щоб заповнити вільний простір навколо. Цей параметр може приймати такі значення: NONE (за замовчуванням, елемент не розтягується), X (елемент розтягується тільки по горизонталі), Y (елемент розтягується лише по вертикалі) та BOTH (елемент розтягується по вертикалі та горизонталі).
anchor: розміщує віджет у певній частині контейнера. Може приймати значення n, e, s, w, ne, nw, se, sw, c, які є скороченнями від Noth(північ - вгору), South (південь – низ), East (схід – права сторона), West (захід – ліва сторона) та Center (по центру). Наприклад, значення nw вказує на верхній лівий кут
side: вирівнює віджет по одній із сторін контейнера. Може приймати значення: TOP (за промовчанням, вирівнюється по верхній стороні контейнера), BOTTOM (вирівнювання з нижньої сторони), LEFT (вирівнювання з лівої сторони), RIGHT (вирівнювання з правого боку).
ipadx: встановлює відступ вмісту віджету від його кордону по горизонталі.
ipady: встановлюють відступ вмісту віджету від його кордону по вертикалі.
padx: встановлює відступ віджету від меж контейнера по горизонталі.
pady: встановлює відступ віджету від меж контейнера по вертикалі.
Anchor
Параметр anchor містить віджет у певній частині контейнера. Може приймати такі значення:
n
: положення вгорі центромe
: положення в правій частині контейнера по центруs
: положення внизу по центруw
: положення в лівій частині контейнера по центруnw
: положення у верхньому лівому куткуne
: положення у верхньому правому куткуse
: положення в нижньому правому куткуsw
: положення в нижньому лівому куткуcenter
: положення центру
Схематично це виглядає так:
Також варто зазначити, що для деяких сценаріїв (наприклад, розташування в нижній частині контейнера) може знадобитися вказати для параметра expand значення True. Наприклад, помістимо кнопку у верхньому лівому кутку:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click me") btn.pack(anchor="nw") root.mainloop()
Розміщення Place
Метод place() дозволяє більш точно налаштувати координати та розміри віджету. Він приймає такі параметри:
height та width: встановлюють відповідно висоту та ширину елемента в пікселях
relheight і relwidth: також задають відповідно висоту та ширину елемента, але як значення використовується число float у проміжку між 0.0 та 1.0, яке вказує на частку від висоти та ширини батьківського контейнера
x та y: встановлюють зміщення елемента по горизонталі та вертикалі в пікселях відповідно щодо верхнього лівого кута контейнера< /p>
relx і rely: також задають зміщення елемента по горизонталі та вертикалі, але як Значення використовується число float у проміжку між 0.0 та 1.0, яке вказує на частку від висоти та ширини батьківського контейнера
bordermode: задає формат межі елемента. Може приймати значення
INSIDE
(за замовчуванням) таOUTSIDE
anchor: встановлює опції розтягування елемента. Може приймати значення n, e, s, w, ne, nw, se, sw, c, які є скороченнями від North (північ - вгору), South (південь – низ), East (схід – права сторона), West (захід – ліва сторона) та Center (по центру). Наприклад, значення nw вказує на верхній лівий кут
Установка розташування
Параметри x
та y
дозволяють встановити точні параметри розташування щодо верхнього лівого кута контейнера:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click me") btn.place(x=20, y=30) root.mainloop()
У даному випадку кнопка відносно верхнього лівого кута контейнера спрощена на 20 одиниць по осі X та на 30 одиниць по осі Y:
Параметри relx і rely також дозволяють змістити віджет, але як значення використовується число float у проміжку між 0.0 та 1.0, яке вказує на частку від висоти та ширини батьківського контейнера:
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") btn = ttk.Button(text="Click me") btn.place(relx=0.4, rely=0.25) root.mainloop()
У цьому випадку кнопка зміщена щодо верхнього лівого кута контейнера на 40% ширини контейнера по осі Х та на 25% висоти контейнера по осі Y.
Розміщення Grid
Метод grid() дозволяє помістити віджет у певну комірку умовної сітки або гриду.
Метод grid застосовує такі параметри:
column: номер стовпця, відлік починається з нуля
row: номер рядка, відлік починається з нуля
columnspan: скільки стовпців повинен займати елемент
rowspan: скільки рядків має займати елемент
ipadx та ipady: відступи по горизонталі та вертикалі відповідно від меж елемента до його вмісту
padx та pady: відступи по горизонталі та вертикалі відповідно від меж осередку гриду до меж елемента
sticky: вирівнювання елемента в комірці, якщо комірка більша за елемент. Може набувати значень n, e, s, w, ne, nw, se, sw, які вказують відповідний напрямок вирівнювання
Конфігурація гриду
Для конфігурації гриду в контейнері застосовуються два методи:
container.columnconfigure(index, weight) container.rowconfigure(index, weight)
Метод columnconfigure()
налаштовує стовпець. Як параметр index метод отримує індекс стовпця, а через параметр weight встановлює його вагу.
Стовпці розподіляються по всій ширині контейнера відповідно до своєї ваги.
Метод rowconfigure()
налаштовує рядок аналогічним чином. Як параметр index метод отримує індекс рядка, а через параметр weight встановлює її вагу.
Рядки розподіляються по всій довжині контейнера відповідно до своєї ваги.
Наприклад, розтягнемо віджет по всьому простору осередку (значення NSEW):
from tkinter import * from tkinter import ttk root = Tk() root.title("METANIT.COM") root.geometry("250x200") for c in range(3): root.columnconfigure(index=c, weight=1) for r in range(3): root.rowconfigure(index=r, weight=1) for r in range(3): for c in range(3): btn = ttk.Button(text=f"({r},{c})") btn.grid(row=r, column=c, ipadx=6, ipady=6, padx=4, pady=4, sticky=NSEW) root.mainloop()
from tkinter import * root = Tk() root.title("Завдання №3") root.geometry("650x400") root["bg"]="#98FB98" for c in range(5): root.columnconfigure(index=c, weight=1) for r in range(5): root.rowconfigure(index=r, weight=1) btn = Button(text="Пальонка Андрій", width="15").grid(row=0, column=1) btn = Button(text="Самусєв Ілля", width="15").grid(row=0, column=2) btn = Button(text="Хлопенюк Світлана", width="15").grid(row=0, column=3) btn = Button(text="Теодорович Дмитро", width="15").grid(row=1, column=1) btn = Button(text="Адамчук Дмитро", width="15").grid(row=1, column=2) btn = Button(text="Губерук Ліза", width="15").grid(row=1, column=3) btn = Button(text="Дік Саша", width="15").grid(row=2, column=1) btn = Button(text="Зданавічюте Настя", width="15").grid(row=2, column=2) btn = Button(text="Хомюк Таня", width="15").grid(row=2, column=3) btn = Button(text="Шушняк Саша", width="15").grid(row=3, column=1) btn = Button(text="Олькова Таня", width="15").grid(row=3, column=2) btn = Button(text="Томчук Світлана", width="15").grid(row=3, column=3) btn = Button(text="Патута Ангеліна", width="15").grid(row=4, column=1) btn = Button(text="Мельничук Даша", width="15").grid(row=4, column=2) btn = Button(text="Грабовська Софія", width="15").grid(row=4, column=3) root.mainloop()