Appearance
Метод 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, точка начала отсчета от левого верхнего угла:
py
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()Результат выполнения:
Рассмотрим пример с относительным заданием координат relx= и rely=, для кнопок расположенных по углам:
py
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()При изменении размера окна кнопки не будут размещаться, правильно, по углам, но результат может быть следующим:
Другой пример с размещением кнопки в центре окна:
py
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()Результат выполнения:
Упражнения
Создайте окно заданного размера: 400 на 400 пикселей. Для решения используйте метод
place()и абсолютное позиционированиеx,y:- добавьте в четыре кнопки по углам, названия кнопок должны соответствовать их месту положения;
- добавьте ещё одну кнопку расположенную по центру окна;
- измените размер окна мышкой, и проанализируйте результат работы интерфейса.
Создайте окно заданного размера: 600 на 300 пикселей. Для решения используйте метод
place()и относительное позиционированиеrelx,rely:- добавьте в четыре кнопки по центру сторон, названия кнопок должны соответствовать их месту положения;
- добавьте ещё одну кнопку расположенную по центру окна;
- измените размер окна мышкой, и проанализируйте результат работы интерфейса.
Создайте окно заданного размера: 200 на 100 пикселей. Для решения используйте метод
place()и относительное позиционированиеrelx,rely,anchor:- при одном нажатии на кнопку, она должна перемещаться по часовой стрелке на одну позицию: с верху на право, затем вниз, затем налево и обратно наверх.
- при изменении размера окна положение кнопки должно корректно отображаться по краям окна.
Для дальнейшего переиспользования кода, создайте новый файл с названием
app_change_language.py. Напишите программу-форму с переключением интерфейса английский/русский.При нажатии на кнопу происходит переключение языка интерфейса на русский.
И обратное переключение с русского на английский язык.
Надписи на русском поместились не полностью. Это проблема метода
place().
ВНИМАНИЕ:
Метод place() не отслеживает расширение виджетов. Поэтому не желателен для реализации интерфейса.