Метод place() позволяет более точно настроить координаты и размеры виджета. Он принимает следующие параметры:
height и width: устанавливают соответственно высоту и ширину элемента в пикселях
relheight и relwidth: также задают соответственно высоту и ширину элемента, но в качестве значения используется число float в промежутке между 0.0 и 1.0, которое указывает на долю от высоты и ширины родительского контейнера
x и y: устанавливают смещение элемента по горизонтали и вертикали в пикселях соответственно относительно верхнего левого угла контейнера
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.
Параметр anchor помещает виджет в определенной части контейнера. Может принимать следующие значения:
n: положение вверху по центру
e: положение в правой части контейнера по центру
s: положение внизу по центру
w: положение в левой части контейнера по центру
nw: положение в верхнем левом углу
ne: положение в верхнем правом углу
se: положение в нижнем правом углу
sw: положение в нижнем левом углу
center: положение центру
Схематически это выглядит следующим образом:
Стоит отметить, что значение в кавычках для параметра anchor передается в нижнем регистре, без кавычек - в верхнем регистре
btn.pack(anchor=NW)
Например, разместим кнопку в центре окна:
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=.5, rely=.5, anchor="c")
root.mainloop()
При этом все равно устанавливаются относительные координаты, которые примерно соответствуют центру окна, однако сам виджет все позиционируется по центру
Параметры height и width устанавливают соответственно высоту и ширину элемента в пикселях:
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.5, rely=0.5, anchor="c", width=80, height=40)
root.mainloop()
Здесь кнопка имеет ширину в 80 единиц и высоту в 40 единиц.
Параметры relheight и relwidth также задают соответственно высоту и ширину элемента, но в качестве значения используется число 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.5, rely=0.5, anchor="c", relwidth=0.33, relheight=0.25)
root.mainloop()
Здесь ширина кнопки составляет треть ширины контейнера, а высота кнопки - четверть высоты контейнера. И по мере изменения размеров контейнера размеры кнопки тоже будут изменяться.