# grid

Геометрический менеджер, который размещает виджеты в ячейках сетки.

## СИНТАКСИС

          grid option arg ?arg ...?

## ОПИСАНИЕ

Команда grid используется для управления соответствующим геометрическим менеджером, размещающим виджеты по ячейкам сетки, и для получения от него справочной информации. Команда может иметь перечисленные ниже формы в зависимости от значения аргумента option.

grid slave ?slave ...? ?options?
  Если первый аргумент команды является именем окна (любая величина, начинающаяся с ".", команда выполняется точно также, как команда grid configure.
grid bbox master ?column row? ?column2 row2?
  Без аргументов команда возвращает размер ограничивающего прямоугольника для сетки (в пикселях). Возвращаемая величина состоит из четырех чисел. Первые два представляют собой расстояние от границы окна до левого верхнего угла сетки. Следующие два числа представляют ширину и высоту сетки. Если указана единственная колонка и строка, возвращается ограничивающий прямоугольник для соответствующей ячейки сетки (счет слева сверху, начиная с нуля). Если указаны два набора колонок и строк, то возвращается размер прямоугольника, ограничивающего соответствующую область сетки.
grid configure master index ?-option value...?

  Запрашивает или устанавливает свойства колонки для колонки сетки номер index. Допустимые опции -minsize, -weight и -pad. Если одна или более опций указаны, index может быть списком номеров колонок, для которых соответствующие значения опций должны быть установлены.

  Опция -minsize устанавливает минимальный размер колонки на экране.

  Опция -weight (допустимые значения целые числа) устанавливает относительный вес, используемый при распределении свободного пространства между колонками. Нулевой вес указывает, что колонка не будет расширяться. Колонка с весом 2 будет расти вдвое быстрее, чем колонка с весом 1.

  Опция -pad определяет размер полей, которые будут добавлены к размерам максимального окна в колонке при определении необходимой ширины колонки.

  Если в команде указана опция, а ее величина отсутствует, команда возвращает установленное значение данной опции. Если не указана ни одна опция, команда возвращает список опций и их значений в той же форме, в какой они задаются.

grid configure slave ?slave ...? ?options?

  Аргумент(ы) slave представляют собой имена виджетов, которые размещаются в ячейках сетки. За ними следуют пары аргументов, состоящие из имен опций и их значений, которые управляют размещением виджетов. Символы "-", "x" и "^" могут использоваться вместо имен виджетов, чтобы изменить их типовое размещение (детально правила использования этих символов описано ниже (см. "Относительное размещение"). Допустимые имена опций:

  -column n
    Вставляет виджет в n-ую колонку сетки. Номера колонок начинаются с нуля. Если опция не указана, виджет вставляется правее предыдущего виджета, вставленного той же командой grid, или в колонку "0", если это первый виджет в команде. Для каждого символа "x" непосредственно перед именем виджета номер колонки увеличивается на 1. То есть "x" представляет пустую колонку в текущем ряду сетки.
  -columnspan n
    Вставляет виджет таким образом, что он занимает n колонок сетки. По умолчанию виджет занимает одну колонку, если только после имени виджета не идет символ "-". В этом случае каждый последующий символ "-" увеличивает на единицу величину columnspan.
  -in other
    Вставляет виджет(ы) в мастер-окно other. По умолчанию виджет вставляется в непосредственного предка.
  -ipadx amount
    Аргумент amount определяет горизонтальные внутренние поля, которые вставляются в виджет(ы). Эти поля вставляются внутри границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию "0".
  -ipady amount
    Аргумент amount определяет вертикальные внутренние поля, которые вставляются в виджет(ы). Эти поля вставляются внутри границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию "0".
  -padx amount
    Аргумент amount определяет горизонтальные внешние поля, которые вставляются в виджет(ы). Эти поля вставляются вне границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию "0".
  -pady amount
    Аргумент amount определяет вертикальные внешние поля, которые вставляются в виджет(ы). Эти поля вставляются вне границы виджета. Размер должен быть указан в одной из форм, в которой можно задавать размеры на экране, например, 2 (2 пикселя) или .5c (0.5 сантиметра). Значение по умолчанию "0".
  -row n
    Вставляет виджет в n-ную строку сетки. Номера строк считаются с нуля. Если опция не указана, виджет вставляется в ту же строку, что и предыдущий виджет в данной команде grid, или в первую свободную строку, если это правый виджет в команде.
  -rowspan n
    Вставляет виджет таким образом, чтобы он занимал n строк. Значение по умолчанию "1". Если в следующей команде grid содержится символ "^", то он означает, что виджет, находящийся в этом же столбце в предыдущей строке, должен быть расширен еще на одну строку вниз.
  -sticky style
    Если виджет меньше размеров ячейки сетки, опция позволяет разместить (или растянуть) виджет внутри ячейки. Аргумент style является строкой, содержащей одну или несколько из букв n, s, e или w. Строка может содержать пробелы или запятые, но они игнорируются. Каждая из букв означает одну из сторон ячейки, к которой виджет будет "приклеен". Если в строке содержатся символы для двух противоположных сторон, например, n и s (или e и w), виджет будет увеличен таким образом, чтобы заполнить всю высоту (или ширину) ячейки. Таким образом опция -sticky заменяет сразу опции -anchor и -fill для менеджера pack. Значение по умолчанию пустая строка, которая означает, что виджет будет размещен в центре ячейки и будет иметь свой естественный размер.

  Если какой-либо из виджетов, перечисленных в команде, уже размещен в сетке, а в команде для него указаны не все возможные опции, для остальных опций используются предыдущие значения, а не значения по умолчанию.

grid forget slave ?slave ...?
  Удаляет виджет(ы) из сетки и с экрана. Они больше не управляются менеджером grid. Значения опций для удаляемых виджетов не сохраняются, так что если виджет будет через некоторое время помещен в сетку, для него будут использоваться значения опций по умолчанию.
grid info slave
  Возвращает список опций и их значений для окна slave в той же форме, в какой они задаются в команде grid configure. Первые два элемента списка "-in master", где "master" имя окна, в котором размещается slave.
grid location master x y
  Аргументы x и y должны быть координатами в системе координат мастер окна. Команда возвращает номер колонки и строки, в которой находится точка с координатами x и y. Если она расположена выше или левее сетки, возвращается "-1".
grid propagate master ?boolean?
  Аргумент boolean, если он задан, определяет, будет ли окно master расширяться при необходимости (подробное описание опции см. "Распространение размеров"). Команда при этом возвращает пустую строку. Если аргумент не задан, команда возвращает текущее значение опции (0 или 1). По умолчанию расширение разрешено.
grid rowconfigure master index ?-option value...?

  Запрашивает или устанавливает свойства строки для строки сетки номер index. Допустимые опции -minsize, -weight и -pad. Если одна или более опций указаны, index может быть списком номеров строк, для которых соответствующие значения опций должны быть установлены.

  Опция -minsize устанавливает минимальный размер строки на экране.

  Опция -weight (допустимые значения целые числа) устанавливает относительный вес, используемый при распределении свободного пространства между строками. Нулевой вес указывает, что строка не будет расширяться. Строка с весом 2 будет расти вдвое быстрее, чем строка с весом 1.

  Опция -pad определяет размер полей, которые будут добавлены к размерам максимального окна в строке при определении необходимой ширины колонки.

  Если в команде указана опция, а ее величина отсутствует, команда возвращает установленное значение данной опции. Если не указана ни одна опция, команда возвращает список опций и их значений в той же форме, в какой они задаются.

grid remove slave ?slave ...?
  Удаляет виджет(ы) из сетки и с экрана. Они больше не управляются менеджером grid. Однако, значения опций для них сохраняются, так что если виджет будет через некоторое время помещен в сетку, для него будут использоваться прежние значения опций.
grid size master
  Возвращает размер сетки (в колонках и строках) для окна master. Размер определяется наибольшим номером строки или столбца, в которых размещен виджет или задано ненулевое значение одной из опций -minsize, -weight или -pad.
grid slaves master ?-option value?
  Если опции не заданы, возвращает список всех виджетов, размещенных в сетке (размещенные позже в списке стоят раньше). Допустимые опции -row и -column. Если они указаны, команда возвращает список виджетов, размещенных в соответствующей строке или столбце.

## ОТНОСИТЕЛЬНОЕ РАЗМЕЩЕНИЕ

Команда grid содержит ограниченный набор возможностей для размещения виджетов без явного указания строк и колонок для каждого. Если номер строки или колонки не указан явно, он рассчитывается в момент размещения виджета исходя из текущего заполнения сетки, позиции виджета относительно других виджетов и наличия в команде специальных символов "-", "x" и "^" вместо имен виджетов.

-
  Этот символ увеличивает значение опции -columnspan для виджета слева. Несколько символов "-" подряд означают последовательное увеличение значения опции -columnspan. Символ "-" не может стоять после "^" или "x".
x
  Этот символ оставляет пустую колонку между виджетом слева и виджетом справа.
^
  Этот символ увеличивает значение опции -rowspan для виджета в соответствующей колонке предыдущей строки. Число и расположение символов ^ в строке должно соответствовать числу и расположению расширяемых виджетов в предыдущей строке.

## АЛГОРИТМ РАЗМЕЩЕНИЯ grid

Геометрический менеджер grid размещает виджеты в окне в три шага. На первом шаге определяются минимальные размеры, необходимые для размещения всех виджетов и (если распространение размеров разрешено) формируется запрос на изменение размеров мастер-окна. На втором шаге необходимые размеры сравниваются с реальными размерами мастер-окна. Если они не совпадают, то размеры виджетов пересчитываются соответствующим образом. На третьем шаге каждый виджет размещается в своей колонке (колонках) и строке (строках) в соответствии со значением опции -sticky.

Чтобы определить минимальные размеры, необходимые для колонок и строк, геометрический менеджер сначала рассматривает те виджеты, у которых значения обеих опций -columnspan и -rowspan равны "1", рассчитывает их размер и определяет минимальный размер колонок и строк как максимум из соответствующих размеров размещаемых в них виджетов (включая поля) и значения соответствующей опции -minsize. После этого рассматриваются виджеты со значением опции -columnspan или -rowspan больше единицы. Если отведенная группа колонок или строк мала для такого виджета, тогда дополнительный размер распределяется между членами группы пропорционально значениям их опций -weight. Если все члены группы имеют нулевой вес, они получают одинаковое приращение размеров.

Для мастер окон, размер которых оказался больше необходимого, дополнительное пространство распределяется пропорционально весам колонок и строк соответственно. Если все веса нулевые, виджеты размещаются в центре мастер-окна. Если размер мастер-окна меньше необходимого, то размеры колонок и строк уменьшаются пропорционально их весам. Однако, если размер колонки или строки уменьшился до значения соответствующей опции -minsize, ее вес считается равным нулю. Если все строки или колонки уменьшены до размеров, равных значениям опций -minsize, и требуется дальнейшее уменьшение размеров, группа виджетов обрезается справа и снизу.

## РАСПРОСТРАНЕНИЕ РАЗМЕРОВ

Обычно менеджер рассчитывает размеры мастер-окна, необходимые для размещения виджетов, и, при необходимости, устанавливает размеры мастер окна таким образом, чтобы в нем в точности поместились все необходимые виджеты. Это приводит к тому, что информация о размерах виджетов распространяется по иерархическому дереву виджетов, в результате чего целое поддерево изменяет свои размеры при изменении одного из листьевых элементов. Однако, команда grid propagate может быть использована для отключения этого механизма для одного или нескольких мастер-окон. Если распространение размеров отключено, информация о необходимых размерах не передается мастер-окну. Это может оказаться полезным, если вы хотите, чтобы мастер-окно сохраняло те размеры, которые вы определили.

## ОГРАНИЧЕНИЯ НА МАСТЕР-ОКНА

Мастер-окно для каждого размещаемого виджета должно быть его непосредственным предком (по умолчанию) или одним из потомков его предка. Это ограничение гарантирует разумное поведение виджетов при удалении toplevel-окон.

## ПОРЯДОК РАЗМЕЩЕНИЯ

Если мастер-окно для виджета не является его непосредственным предком, необходимо быть уверенным, что виджет лежит в стеке окон выше, чем мастер-окно. В противном случае мастер-окно закроет собой виджет и создастся впечатление, что виджет не упакован правильным образом. Простейший способ избежать подобных проблем следить, чтобы мастер-окно было создано раньше, чем виджет: чем позже создано окно, тем выше оно в стеке. Если это почему-либо неудобно, можно использовать команды raise и lower для изменения порядка окон в стеке.