Урок 4. Розміщення об’єктів у вікні

Розміщення Pack

Для позиціонування віджетів у контейнері застосовуються різні способи. Один з них представляє виклик віджету методу pack(). Цей метод приймає такі параметри:

Anchor

Параметр anchor містить віджет у певній частині контейнера. Може приймати такі значення:

Схематично це виглядає так:

позиціонування віджету в tkinter та python

Також варто зазначити, що для деяких сценаріїв (наприклад, розташування в нижній частині контейнера) може знадобитися вказати для параметра 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()
позиціонування віджету в контейнері в tkinter і python

Розміщення Place

Метод place() дозволяє більш точно налаштувати координати та розміри віджету. Він приймає такі параметри:

Установка розташування

Параметри 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:

установка розташування віджету за допомогою методу place в Tkinter та Python

Параметри 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.

установка відносних координат віджету за допомогою методу place в Tkinter та Python

Розміщення Grid

Метод grid() дозволяє помістити віджет у певну комірку умовної сітки або гриду.

Метод grid застосовує такі параметри:

Конфігурація гриду

Для конфігурації гриду в контейнері застосовуються два методи:

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()
sticky та вирівнювання віджету в grid у додатку на tkinter та python
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()