grid
-
НАЗВАНИЕ
- grid — Управляющий геометрией, который размещает виджеты в сетке
- СИНТАКСИС
- ОПИСАНИЕ
-
grid slave ?slave ...? ?options?
- grid anchor master ?anchor?
- grid bbox master ?column row? ?column2 row2?
- grid columnconfigure master index ?-option value...?
- grid configure slave ?slave ...? ?options?
-
-column n
- -columnspan n
- -in other
- -ipadx amount
- -ipady amount
- -padx amount
- -pady amount
- -row n
- -rowspan n
- -sticky style
- -columnspan n
- grid forget slave ?slave ...?
- grid info slave
- grid location master x y
- grid propagate master ?boolean?
- grid rowconfigure master index ?-option value...?
- grid remove slave ?slave ...?
- grid size master
- grid slaves master ?-option value?
- grid anchor master ?anchor?
- ОТНОСИТЕЛЬНОЕ РАЗМЕЩЕНИЕ
-
-
- x
- ^
- x
- АЛГОРИТМ СЕТКИ
- ПРОПАГАЦИЯ ГЕОМЕТРИИ
- ОГРАНИЧЕНИЯ ДЛЯ ОСНОВНЫХ ОКОН
- ПОРЯДОК СЛОЕНИЯ
- АВТОРЫ
- ПРИМЕРЫ
- СМОТРИТЕ ТАКЖЕ
- КЛЮЧЕВЫЕ СЛОВА
Название
grid — Управляющий геометрией, который размещает виджеты в сеткеСинтаксис
grid option arg ?arg ...?Описание
Команда grid используется для взаимодействия с управляющим геометрией grid, который размещает виджеты в строках и столбцах внутри другого окна, называемого главным окном (или master window). Команда grid может иметь несколько форм в зависимости от аргумента option:- grid slave ?slave ...? ?options?
- Если первый аргумент команды grid подходит в качестве первого аргумента slave для команды grid configure, то есть это имя окна (любое значение, начинающееся с .), или один из символов x или ^ (см. раздел РАЗМЕЩЕНИЕ ОТНОСИТЕЛЬНО ниже), тогда команда обрабатывается так же, как команда grid configure.
- grid anchor master ?anchor?
- Значение anchor управляет размещением сетки внутри master, когда ни одна строка/столбец не имеют веса. Дополнительные сведения см. в разделе АЛГОРИТМ РАЗМЕЩЕНИЯ В СЕТКЕ ниже. По умолчанию anchor имеет значение nw.
- grid bbox master ?column row? ?column2 row2?
- Без аргументов возвращает прямоугольник (в пикселях) сетки. Возвращаемое значение состоит из 4 целых чисел. Первые два — смещение в пикселях от окна master (x, затем y) левого верхнего угла сетки, а два других числа — ширина и высота сетки также в пикселях. Если на командной строке указан один column и row, то возвращается прямоугольник для этой ячейки, где левая верхняя ячейка имеет номер 0. Если оба аргумента column и row указаны, то возвращается прямоугольник, охватывающий указанные строки и столбцы.
- grid columnconfigure master index ?-option value...?
- Запрос или установка свойств столбца index в геометрическом окне master. Допустимые опции: -minsize, -weight, -uniform и -pad. Если задана одна или несколько опций, то index может быть передан как список индексов столбцов, к которым будут применяться конфигурационные параметры. Индексы могут быть целыми числами, именами окон или ключевым словом all. Для all параметры применяются ко всем столбцам, в которых сейчас находятся окна-дочерние элементы. Для имени окна это окно должно быть дочерним для данного master, и параметры применяются ко всем столбцам, занятым этим дочерним окном. Опция -minsize устанавливает минимальный размер, в единицах экрана, который будет разрешен для этого столбца. Опция -weight (целое значение) устанавливает относительный вес для распределения дополнительного пространства между столбцами. Вес 0 (ноль) означает, что столбец не будет изменять свой размер. Столбец с весом 2 будет увеличиваться в два раза быстрее, чем столбец с весом 1, когда дополнительное пространство распределяется по таблице. Опция -uniform, при задании ненулевого значения, помещает столбец в группу единообразных столбцов с другими столбцами, имеющими то же значение для -uniform. Пространство для столбцов, принадлежащих к группе единообразных столбцов, распределяется так, что их размеры всегда строго пропорциональны их значениям -weight. Дополнительные сведения см. в разделе АЛГОРИТМ РАЗМЕЩЕНИЯ В СЕТКЕ ниже. Опция -pad определяет количество единиц экрана, которые будут добавлены к самому большому окну, полностью помещающемуся в этом столбце, когда менеджер геометрии сетки запрашивает размер у содержащего окна. Если указана только опция без значения, возвращается текущее значение этой опции. Если указаны только окно master и индекс, все текущие настройки возвращаются в виде списка пар «-option value».
- grid configure slave ?slave ...? ?options?
- Аргументы представляют собой имена одного или нескольких окон-дочерних элементов, за которыми следуют пары аргументов, определяющие способ управления этими элементами. Символы -, x и ^ могут быть указаны вместо имени окна для изменения стандартного расположения slave, как описано в разделе РАЗМЕЩЕНИЕ ОТНОСИТЕЛЬНО ниже. Поддерживаются следующие опции:
- -column n
- Вставить дочерний элемент, чтобы он занимал n-й столбец в сетке. Нумерация столбцов начинается с 0. Если эта опция не указана, то дочерний элемент располагается справа от предыдущего дочернего элемента, указанного в этом вызове команды grid, или в столбце «0», если это первый дочерний элемент. Для каждого символа x, непосредственно предшествующего slave, позиция столбца увеличивается на единицу. Таким образом, x представляет пустой столбец в этой строке сетки.
- -columnspan n
- Вставить дочерний элемент, чтобы он занимал n столбцов в сетке. По умолчанию — один столбец, если имя окна следует за символом -, то columnspan увеличивается на единицу за каждым последующим символом -.
- -in other
- Вставить дочерний(е) элемент(ы) в окно master, заданное other. По умолчанию — родительское окно первого дочернего элемента.
- -ipadx amount
- amount задаёт количество горизонтального внутреннего отступа с каждой стороны slave. Это пространство добавляется внутри границы slave. amount должен быть допустимым расстоянием на экране, например 2 или .5c. По умолчанию 0.
- -ipady amount
- amount задаёт количество вертикального внутреннего отступа сверху и снизу slave. Это пространство добавляется внутри границы slave. По умолчанию 0.
- -padx amount
- amount задаёт количество горизонтального внешнего отступа с каждой стороны slave, в единицах экрана. Amount может быть списком из двух значений для задания отступа слева и справа отдельно. По умолчанию 0. Это пространство добавляется за пределами границы slave.
- -pady amount
- amount задаёт количество вертикального внешнего отступа сверху и снизу slave, в единицах экрана. Amount может быть списком из двух значений для задания отступа сверху и снизу отдельно. По умолчанию 0. Это пространство добавляется за пределами границы slave.
- -row n
- Вставить дочерний элемент, чтобы он занимал n-ю строку в сетке. Нумерация строк начинается с 0. Если эта опция не указана, то дочерний элемент располагается в той же строке, что и предыдущий дочерний элемент, указанный в этом вызове команды grid, или в первой свободной строке, если это первый дочерний элемент.
- -rowspan n
- Вставить дочерний элемент, чтобы он занимал n строк в сетке. По умолчанию — одна строка. Если следующая команда grid содержит символы ^ вместо slave, которые выстраиваются в столбцы этого slave, то rowspan этого slave увеличивается на единицу.
- -sticky style
- Если ячейка slave больше своих запрошенных размеров, эта опция может быть использована для позиционирования (или растяжения) slave внутри своей ячейки. Style — строка, содержащая ноль или более символов n, s, e или w. Строка может содержать пробелы или запятые, но они игнорируются. Каждый символ относится к стороне (север, юг, восток или запад), к которой slave будет «прилипать». Если указаны как n, так и s (или e и w), slave будет растянут, чтобы заполнить всю высоту (или ширину) своей ячейки. Опция -sticky включает комбинацию -anchor и -fill, используемых командой pack. По умолчанию — «», что приводит к центрированию slave в своей ячейке при его запрошенном размере.
Если какой-либо из дочерних элементов уже управляется менеджером геометрии, то любые не заданные опции для них сохраняют свои предыдущие значения, а не принимают значения по умолчанию.
- grid forget slave ?slave ...?
- Удаляет каждый из slave из сетки для его master и сбрасывает их окна. Дочерние элементы больше не будут управляться менеджером геометрии сетки. Конфигурационные опции для этого окна забываются, так что если slave будет повторно управляться менеджером геометрии сетки, будут использоваться начальные настройки по умолчанию.
- grid info slave
- Возвращает список, элементами которого являются текущее состояние конфигурации slave, заданного slave, в той же форме опция-значение, которая может быть указана для grid configure. Первые два элемента списка — «-in master», где master — master дочернего элемента.
- grid location master x y
- При заданных значениях x и y в единицах экрана относительно окна master, возвращается номер столбца и строки в этом месте x и y. Для расположений, которые находятся выше или левее сетки, возвращается -1.
- grid propagate master ?boolean?
- Если boolean имеет истинное булево значение, такое как 1 или on, то распространение включено для master, которое должно быть именем окна (см. раздел РАСПРОСТРАНЕНИЕ ГЕОМЕТРИИ ниже). Если boolean имеет ложное булево значение, распространение отключено для master. В обоих случаях возвращается пустая строка. Если boolean опущено, то команда возвращает 0 или 1, чтобы указать, включено ли распространение для master. Распространение включено по умолчанию.
- grid rowconfigure master index ?-option value...?
- Запрос или установка свойств строки index в геометрическом окне master. Допустимые опции: -minsize, -weight, -uniform и -pad. Если задана одна или несколько опций, то index может быть передан как список индексов строк, к которым будут применяться конфигурационные параметры. Индексы могут быть целыми числами, именами окон или ключевым словом all. Для all параметры применяются ко всем строкам, в которых сейчас находятся окна-дочерние элементы. Для имени окна это окно должно быть дочерним для данного master, и параметры применяются ко всем строкам, занятым этим дочерним окном. Опция -minsize устанавливает минимальный размер, в единицах экрана, который будет разрешен для этой строки. Опция -weight (целое значение) устанавливает относительный вес для распределения дополнительного пространства между строками. Вес 0 (ноль) означает, что строка не будет изменять свой размер. Строка с весом 2 будет увеличиваться в два раза быстрее, чем строка с весом 1, когда дополнительное пространство распределяется по таблице. Опция -uniform, при задании ненулевого значения, помещает строку в группу единообразных строк с другими строками, имеющими то же значение для -uniform. Пространство для строк, принадлежащих к группе единообразных строк, распределяется так, что их размеры всегда строго пропорциональны их значениям -weight. Дополнительные сведения см. в разделе АЛГОРИТМ РАЗМЕЩЕНИЯ В СЕТКЕ ниже. Опция -pad определяет количество единиц экрана, которые будут добавлены к самому большому окну, полностью помещающемуся в этой строке, когда менеджер геометрии сетки запрашивает размер у содержащего окна. Если указана только опция без значения, возвращается текущее значение этой опции. Если указаны только окно master и индекс, все текущие настройки возвращаются в виде списка пар «-option value».
- grid remove slave ?slave ...?
- Удаляет каждый из slave из сетки для его master и сбрасывает их окна. Дочерние элементы больше не будут управляться менеджером геометрии сетки. Однако конфигурационные опции для этого окна запоминаются, так что если slave будет повторно управляться менеджером геометрии сетки, предыдущие значения сохраняются.
- Размер сеткиглавный
- Возвращает размер сетки (в столбцах, затем строках) для главного элемента. Размер определяется либо вспомогательным элементом, занимающим наибольшую строку или столбец, либо наибольшим столбцом или строкой с ненулевым значением -minsize, -weight или -pad.
- Вспомогательные элементы сеткиглавный ?-параметр значение?
- Если опции не указаны, возвращается список всех вспомогательных элементов в главном элементе, упорядоченных по времени последнего управления. Параметр может быть -row или -column, что приводит к возвращению только вспомогательных элементов в указанной строке (или столбце) с помощью значения.
Относительное размещение
Команда grid содержит ограниченный набор возможностей, которые позволяют создавать макеты без указания информации о строках и столбцах для каждого вспомогательного элемента. Это позволяет переупорядочивать, добавлять или удалять вспомогательные элементы без необходимости явного указания информации о строках и столбцах. Когда для вспомогательного элемента не указана информация о столбце или строке, по умолчанию выбираются значения для -column, -row, -columnspan и -rowspan в момент управления вспомогательным элементом. Значения выбираются на основе текущего макета сетки, положения вспомогательного элемента относительно других вспомогательных элементов в той же команде grid и наличия символов -, x и ^ в команде grid, где обычно ожидаются имена вспомогательных элементов.- -
- Это увеличивает -columnspan вспомогательного элемента слева. Несколько - подряд последовательно увеличивают количество занимаемых столбцов. - не может следовать за ^ или x, а также не может быть первым аргументом вспомогательного элемента для команды grid configure.
- x
- Это оставляет пустой столбец между вспомогательным элементом слева и вспомогательным элементом справа.
- ^
- Это расширяет -rowspan вспомогательного элемента над символами ^ в сетке. Количество символов ^ в строке должно совпадать с количеством столбцов, занимаемых вспомогательным элементом над ним.
Алгоритм работы сетки
Менеджер геометрии сетки размещает свои вспомогательные элементы в три этапа. На первом этапе вычисляется минимальный размер, необходимый для размещения всех вспомогательных элементов, затем (если включена передача), от главного окна запрашивается достижение этого размера. На втором этапе запрашиваемый размер сравнивается с фактическим размером главного окна. Если размеры отличаются, то в макет добавляется или удаляется необходимое пространство. На заключительном этапе каждый вспомогательный элемент размещается в своих строках и столбцах в зависимости от флага sticky.Для вычисления минимального размера макета менеджер геометрии сетки сначала рассматривает все вспомогательные элементы, значения -columnspan и -rowspan которых равны единице, и вычисляет номинальный размер каждой строки или столбца как minsize для этой строки или столбца или сумму padding плюс размер наибольшего вспомогательного элемента, что больше. После этого строки или столбцы в каждой однородной группе адаптируются друг к другу. Затем рассматриваются вспомогательные элементы, у которых значения row-span или column-span больше единицы. Если группе строк или столбцов нужно увеличить размер для размещения этих элементов, то дополнительное пространство добавляется к каждой строке или столбцу в группе в соответствии с их значением weight. Для каждой группы, где все значения weight равны нулю, дополнительное пространство распределяется равномерно.
Когда несколько строк или столбцов принадлежат одной однородной группе, выделяемое им пространство всегда пропорционально их значениям weight. (Значение weight, равное нулю, считается равным 1.) Другими словами, строка или столбец с настройкой -weight 1 -uniform a будут иметь ровно такой же размер, как любая другая строка или столбец с настройкой -weight 1 -uniform a. Строка или столбец с настройкой -weight 2 -uniform b будут ровно в два раза больше, чем такой, который настроен на -weight 1 -uniform b.
Более технически, размер каждой строки или столбца в группе будет равен k*weight для некоторой константы k. Постоянная k выбирается таким образом, чтобы ни одна строка или столбец не становились меньше своего минимального размера. Например, если все строки или столбцы в группе имеют одинаковое значение weight, то каждая строка или столбец будет иметь такой же размер, как наибольшая строка или столбец в группе.
Для главных окон, размер которых больше, чем запрашиваемый макет, дополнительное пространство распределяется в соответствии со значениями weight строк и столбцов. Если все значения weight равны нулю, макет размещается в главном окне в соответствии со значением anchor. Для главных окон, размер которых меньше, чем запрашиваемый макет, пространство уменьшается для столбцов и строк в соответствии с их значениями weight. Однако, как только столбец или строка сокращается до своего минимального размера, его значение weight принимается за ноль. Если макету необходимо удалить больше пространства, чем разрешено, например, когда все строки или столбцы находятся на своих минимальных размерах, макет размещается и обрезается в соответствии со значением anchor.
Распространение геометрии
Менеджер геометрии сетки обычно вычисляет, какого размера должно быть главное окно, чтобы удовлетворить потребности своих вспомогательных элементов, и устанавливает запрошенные ширину и высоту главного окна до этих размеров. Это приводит к распространению информации о геометрии по иерархии окон до верхнего уровня окна, чтобы вся поддеревья подстраивались под потребности лиственных окон. Однако с помощью команды grid propagate можно отключить распространение для одного или нескольких главных окон. Если распространение отключено, grid не будет устанавливать запрошенные ширину и высоту главного окна. Это может быть полезно, например, если вы хотите, чтобы главное окно имело фиксированный размер, который вы укажете.Ограничения на главные окна
Главное окно для каждого вспомогательного элемента должно быть либо родителем вспомогательного элемента (по умолчанию), либо потомком родителя вспомогательного элемента. Это ограничение необходимо для гарантии, что вспомогательный элемент может быть размещен в любой видимой части его главного окна без риска обрезания вспомогательного элемента его родителем. Кроме того, все вспомогательные элементы в одном вызове grid должны иметь одно и то же главное окно.Порядок стекирования
Если главное окно для вспомогательного элемента не является его родителем, то необходимо убедиться, что вспомогательный элемент имеет более высокий порядок стекирования, чем главное окно. В противном случае главное окно будет скрывать вспомогательный элемент, и будет казаться, что вспомогательный элемент не был правильно размещен. Самый простой способ убедиться, что вспомогательный элемент находится выше, чем главное окно, — это сначала создать главное окно: последнее созданное окно будет самым высоким в порядке стекирования.Благодарности
Команда grid основана на идеях, заимствованных у менеджера геометрии GridBag, написанного Дугом. Стейном, и менеджера геометрии blt_table, написанного Джорджем Хоулеттом.Примеры
Окно верхнего уровня, содержащее текстовый виджет и две полосы прокрутки:# Make the widgets
toplevel .t
text .t.txt -wrap none -xscroll {.t.h set} -yscroll {.t.v set}
scrollbar .t.v -orient vertical -command {.t.txt yview}
scrollbar .t.h -orient horizontal -command {.t.txt xview}
# Lay them out
grid .t.txt .t.v -sticky nsew
grid .t.h -sticky nsew
# Tell the text widget to take all the extra room
grid rowconfigure .t .t.txt -weight 1
grid columnconfigure .t .t.txt -weight 1 Три виджета с одинаковой шириной, несмотря на их различную «естественную» ширину:
button .b -text "Foo" entry .e -variable foo label .l -text "This is a fairly long piece of text" grid .b .e .l -sticky ew grid columnconfigure . "all" -uniform allTheSame
См. также
pack, place
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/grid.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TkCmd/grid.htm