Метод grid() - сетка
Метод grid() применяет другой подход к позиционированию элементов, нежели метод place()
, позволяя поместить элемент в определенную ячейку условной сетки или грида.
Grid() не растягивает виждеты, находящиеся в нем, а всегда занимает минимально необходимое пространство, необходимое для виджета.
Метод grid() применяет следующие параметры:
column
: номер столбца, отсчет начинается с нуляrow
: номер строки (ряда), отсчет начинается с нуляcolumnspan
: сколько столбцов должен занимать элементrowspan
: сколько строк (рядов) должен занимать элементipadx
иipady
: отступы по горизонтали и вертикали соответственно от границ элемента до его текстаpadx
иpady
: отступы по горизонтали и вертикали соответственно от границ ячейки грида до границ элементаsticky
: выравнивание элемента в ячейке, если ячейка больше элемента. Может принимать значения: N, E, S, W, NE, NW, SE, SW, NSEW - они указывают соответствующее направление выравнивания
Начальный пример демонстрации позиционирования с помощью сетки:
from tkinter import *
root = Tk()
root.title("Welcome to grid app!")
root.geometry('350x200')
label = Label(root, text="Hello!")
label.grid(column=0, row=0)
button = Button(root, text="Click Me!")
button.grid(column=1, row=0)
root.mainloop()
2
3
4
5
6
7
8
9
10
Результат выполнения:
Следующий пример позволяет понять, как расположить элементы на сетке в виде шахматной доски:
from tkinter import *
root = Tk()
root.title("Welcome to grid app!")
label = Label(root, text="Hello!")
label.grid(column=1, row=0)
button_1 = Button(root, text="Left")
button_1.grid(column=0, row=0)
button_2 = Button(root, text="Right")
button_2.grid(column=2, row=0)
button_3 = Button(root, text="Bottom")
button_3.grid(column=1, row=1)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
Результат выполнения:
Пример окна для ввода логина и пароля:
from tkinter import *
root = Tk()
root.title("Welcome to the second entry app")
label_login = Label(root, text="Login")
label_login.grid(column=0, row=0, sticky=E)
field_login = Entry(root, width=10)
field_login.grid(column=1, row=0)
label_pass = Label(root, text="Password")
label_pass.grid(column=0, row=1, sticky=E)
field_pass = Entry(root, width=10)
field_pass.grid(column=1, row=1)
button = Button(root, text="Enter")
button.grid(column=0, row=2, columnspan=2, sticky=NSEW)
root.mainloop()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Результат выполнения:
Упражнения
Для дальнейшего переиспользования кода, создайте новый файл с названием
app_calculator_fields_grid.py
. Используя методgrid()
напишите программу состоящую из:- однострочного текстового поля,
- метки с отображением знака "+",
- второго однострочного текстового поля,
- кнопкой "=", при нажатии на которую результат вычисления выводиться в третье текстовое поле,
- третьего однострочного тестового поля.
- Добавьте в программу примеры со знаками: "-", "*", "**", "/", "//", "%". Реализуйте решения этих примеров.
- Добавьте проверку деления на 0. С выводом сообщения об ошибке, в удобное для пользователя место. Консольный вывод сообщения об ошибке исключить.
Для дальнейшего переиспользования кода, создайте новый файл с названием
app_chessboard.py
. Используя методgrid()
создайте подобие шахматной доски размером 4 на 4, с обозначением полей: A, B, C, D верхняя горизонтальная строка и 8, 7, 6, 5 левый вертикальный столбик. Создание отдельных клеток реализуйте кнопками, разукрасив и подписав их соответственно.Добавьте функции нажатия кнопок, при выполнении которых в консоль будут выводиться координаты нажатой кнопки: A1, B3 и т.д.
Добавить многострочное текстовое поле вдоль правого края доски.
Выводить в текстовое поле координаты нажатых кнопок: A1, B3 и т.д.
Реализуйте правильную расстановку запятых: если напечатано только одно значение, запятая не ставиться. Добавление следующих записей происходит через запятую.
Реализовать вставку текста, можно, воспользовавшись кодом:
text = Text(root) text.insert(END, "Вставка текста в конец.") text.pack() print(text.get(1.0, END))
1
2
3
4