Метод 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()
Здесь ширина кнопки составляет треть ширины контейнера, а высота кнопки - четверть высоты контейнера. И по мере изменения размеров контейнера размеры кнопки тоже будут изменяться.