Метод place()
Метод place()
позволяет задавать абсолютные и относмтельные параметры позиционирования. Он принимает следующие параметры:
height
иwidth
: устанавливают соответственно высоту и ширину элемента в пикселяхrelheight
иrelwidth
: также задают соответственно высоту и ширину элемента, но в качестве значения используется числоfloat
в промежутке между 0.0 и 1.0, которое указывает на долю от высоты и ширины родительского контейнераx
иy
: устанавливают смещение элемента по горизонтали и вертикали в пикселях соответственно относительно верхнего левого угла контейнераrelx
иrely
: также задают смещение элемента по горизонтали и вертикали, но в качестве значения используется число float в промежутке между 0.0 и 1.0, которое указывает на долю от высоты и ширины родительского контейнераbordermode
: задает формат границы элемента. Может принимать значение INSIDE (по умолчанию) и OUTSIDEanchor
: устанавливает опции растяжения элемента. Может принимать значения n, e, s, w, ne, nw, se, sw, c, которые являются сокращениями от Noth(север - вверх), South (юг - низ), East (восток - правая сторона), West (запад - левая сторона) и Center (по центру). Например, значение nw указывает на верхний левый угол.
Следует заметить, что при использовании метода place()
не надо использовать метод pack()
, чтобы сделать элемент видимым.
Разместим три кнопки задавая абсолютные координаты x
и y
, точка начала отсчета от левого верхнего угла:
from tkinter import *
root = Tk()
root.geometry("300x150")
button_1 = Button(text="x=10, y=20", font=13)
button_1.place(x=10, y=20)
button_2 = Button(text="x=50, y=45", font=13)
button_2.place(x=50, y=45)
button_3 = Button(text="x=140, y=100", font=13)
button_3.place(x=140, y=100)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
Результат выполнения:
Рассмотрим пример с относительным заданием координат relx=
и rely=
, для кнопок расположенных по углам:
from tkinter import *
root = Tk()
button_top_left = Button(text="top left", font=13)
button_top_left.place(relx=0, rely=.0)
button_top_right = Button(text="top right", font=13)
button_top_right.place(relx=.7, rely=.0)
button_bottom_left = Button(text="bottom left", font=13)
button_bottom_left.place(relx=0, rely=.7)
button_bottom_right = Button(text="bottom right", font=13)
button_bottom_right.place(relx=.6, rely=.7)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
При изменении размера окна кнопки не будут размещаться, правильно, по углам, но результат может быть следующим:
Другой пример с размещением кнопки в центре окна:
from tkinter import *
clicks = 0
def click_button():
global clicks
clicks += 1
button.config(text="Clicks {}".format(clicks))
root = Tk()
root.geometry("300x100")
button = Button(text="Clicks 0", bg="#555", fg="#ccc", font=16, command=click_button)
button.place(relx=.5, rely=.5, anchor="c")
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Результат выполнения:
Упражнения
Создайте окно заданного размера: 400 на 400 пикселей. Для решения используйте метод
place()
и абсолютное позиционированиеx
,y
:- добавьте в четыре кнопки по углам, названия кнопок должны соответствовать их месту положения;
- добавьте ещё одну кнопку расположенную по центру окна;
- измените размер окна мышкой, и проанализируйте результат работы интерфейса.
Создайте окно заданного размера: 600 на 300 пикселей. Для решения используйте метод
place()
и относительное позиционированиеrelx
,rely
:- добавьте в четыре кнопки по центру сторон, названия кнопок должны соответствовать их месту положения;
- добавьте ещё одну кнопку расположенную по центру окна;
- измените размер окна мышкой, и проанализируйте результат работы интерфейса.
Создайте окно заданного размера: 200 на 100 пикселей. Для решения используйте метод
place()
и относительное позиционированиеrelx
,rely
,anchor
:- при одном нажатии на кнопку, она должна перемещаться по часовой стрелке на одну позицию: с верху на право, затем вниз, затем налево и обратно наверх.
- при изменении размера окна положение кнопки должно корректно отображаться по краям окна.
Для дальнейшего переиспользования кода, создайте новый файл с названием
app_change_language.py
. Напишите программу-форму с переключением интерфейса английский/русский.При нажатии на кнопу происходит переключение языка интерфейса на русский.
И обратное переключение с русского на английский язык.
Надписи на русском поместились не полностью. Это проблема метода
place()
.
ВНИМАНИЕ:
Метод place()
не отслеживает расширение виджетов. Поэтому не желателен для реализации интерфейса.