Начнем с базовых понятий. В примере 9.18 создается таблица из меток и полей ввода — уже знакомых нам виджетов Label и Entry. Однако в данном случае они располагаются по сетке.
Пример 9.18. PP4E\Gui\Tour\Grid\grid1.py
from tkinter import * colors = [‘red’, ‘green’, ‘orange’, ‘white’, ‘yellow’, ‘blue’]
r = 0
for c in colors:
Label(text=c, relief=RIDGE, width=25).grid(row=r, column=0) Entry(bg=c, relief=SUNKEN, width=50).grid(row=r, column=1) r += 1
mainloop()
Расположение по сетке заключается в назначении виджетам номеров рядов и колонок, отсчет которых начинается с 0, — библиотека tkinter использует эти координаты, а также размеры виджетов, чтобы расположить виджеты внутри контейнера. Это напоминает действие метода pack, только в данном случае понятия сторон и порядка прикрепления заменяются рядами и колонками.
Если запустить этот сценарий, то он создаст окно, изображенное на рис. 9.29 с данными, введенными в некоторые поля. И снова эта книга не позволяет увидеть цвета, отображаемые в правой части, поэтому вам придется включить свое воображение (или запустить сценарий на своем компьютере).
Рис. 9.29. Менеджер компоновки grid в псевдоживых цветах
В действительности это та же самая классическая структура формы ввода, которую мы видели в предыдущей главе. Метки в левой части описывают данные, которые должны вводиться в поля справа.
Label(…).grid(row=r, column=0)
Entry(…).grid(row=r, column=1)
С точки зрения контейнера, метка помещается в колонку 0 строки с текущим номером (отсчет начинается с 0), а поле ввода помещается в колонку 1. В итоге система компоновки по сетке автоматически располагает метки и поля ввода в виде двухмерной таблицы, обеспечивая одинаковую высоту рядов и ширину колонок, достаточные для размещения самого большого элемента в каждой колонке.
То есть благодаря размещению виджетов по рядам и колонкам они должным образом выравниваются по обоим направлениям. Использование метода pack с фреймами-рядами позволяет добиться того же эффекта, если метки будут иметь фиксированную длину (как было показано в главе 8), однако сетки точнее отражают табличную структуру интерфейсов, включая формы ввода, а также большие таблицы в целом. Следующий раздел иллюстрирует эти различия в программном коде.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011