menu

Создание примитива меню и управление им.

СИНТАКСИС

      menu имяПути ?параметры?
    

СТАНДАРТНЫЕ ПАРАМЕТРЫ

Подробное описание этих параметров приведено в разделе options.

ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ ПРИМИТИВА

Имя параметра:-postcommand
Имя в Базе:postCommand
Класс в Базе:PostCommand

Задает команду Tcl, которая должна выполняться при каждом выводе меню. Эта команда выполняется командой примитива post непосредственно перед выводом меню. В версии 8.0 операционной системы Macintosh и в Windows все команды системы меню выполняются перед выводом меню. Это объясняется ограничениями, накладываемыми конкретными системами управления меню данных платформ.

Имя параметра:-selectcolor
Имя в Базе:selectColor
Класс в Базе:Background

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

Имя параметра:-tearoff
Имя в Базе:tearOff
Класс в Базе:TearOff

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

Имя параметра:-tearoffcommand
Имя в Базе:tearOffCommand
Класс в Базе:TearOffCommand

Если значение этого параметра не пустая строка, то оно задает команду, которая должна выполняться при каждом отрыве от меню. В действительности выполняемая команда состоит из указанной строки, за которой следуют имя меню и имя окна меню отрыва (отделенные от строки команды и друг от друга пробелами). Если, например, параметр имеет значение "a b" и в результате отрыва от меню .x.y должно быть создано новое меню .x.tearoff1, то будет выполнена команда ".a b .x.y .x.tearoff1".

Имя параметра:-title
Имя в Базе:title
Класс в Базе:Title

Строка значение параметра задает имя окна, создаваемого при отрыве от данного меню. Если значением параметра служит NULL, то именем окна станет либо имя кнопки меню, либо содержимое элемента каскада, из которого выполняется данное меню.
Имя параметра:-type
Имя в Базе:type
Класс в Базе:Type

Параметр может принимать одно из значений menubar, tearoff или normal; это значение устанавливается при создании меню. При изменении значения меняется строка, возвращаемая конфигурационной базой данных, однако это не оказывает влияния на поведение примитива меню. Это свойство используется механизмом клонирования и обычно не применяется за пределами библиотеки Tk.

ВВЕДЕНИЕ

Команда menu создает новое окно (заданное аргументом имяПути) и превращает его в примитив меню. Детали изображения меню, такие как его цвета и шрифты, задаются с помощью описанных выше дополнительных параметров в командной строке или в базе данных параметров. Команда menu возвращает имя пути нового окна. В момент выполнения команды не должно быть окна с именем имяПути, однако его непосредственный предок должен существовать.

Меню представляет собой примитив, предназначенный для вывода совокупности однострочных входов, разбитых на несколько колонок (быть может, одну). Входы бывают различных типов и имеют соответственно различные свойства. Входы различных типов могут содержаться в одном и том же меню. Вход меню (menu entry) совсем не то же самое, что примитив поля ввода (entry). Более того, вход меню не является отдельным примитивом все вместе они образуют примитив меню.

При выводе вход меню может содержать до трех различных полей. Главное поле представляет собой метку входа; оно содержит строку текста, изображение или двуцветное изображение в зависимости от значения параметров входа -label, -bitmap и -image. Если для данного входа задан параметр -accelerator, то справа от метки появляется второе текстовое поле. Этот параметр обычно описывает совокупность клавиш, нажатие на которые приводит к тому же результату, что и выбор данного входа в меню. Третье поле представляет собой индикатор. Индикатор применяется только для защелкивающихся входов или переключателей. Он указывает, выделен или нет данный вход, и располагается слева от строки входа.

При обычном использовании вход становится активным (при этом меняется вид строки), если на нем расположен курсор Мыши. Если клавишу .Мыши. в таком положении отпустить, то вход будет выполнен. Результат выполнения зависит от типа входа. Подробное описание результатов приведено ниже при описании конкретных типов входов.

Входы могут быть отключены (disabled); изображение такого входа тускнеет. Привязки меню по умолчанию блокируют активизацию и выполнение команды для отключенного входа. Отключенный вход может быть снова подключен, после чего его вновь можно активизировать и выполнять соответствующую команду.

При изменении активного входа в меню в нем происходит виртуальное событие <<MenuSelect>>. В результате из меню можно запросить активный вход и предпринять какие-либо действия (например, вывести соответствующую контекстно-зависимую подсказку).

КОМАНДНЫЕ ВХОДЫ

Наиболее распространенным типом входа в меню является командный вход, который ведет себя подобно примитиву кнопки. При запуске командного входа выполняется команда Tcl, заданная параметром -command.

ВХОДЫ-РАЗДЕЛИТЕЛИ

Разделитель представляет собой вход, предназначенный для вывода горизонтальной разделительной черты. Разделитель нельзя сделать активным или выполнить, никакого поведения разделителя, отличного от вывода черты не предусмотрено.

ЗАЩЕЛКИВАЮЩИЕСЯ ВХОДЫ

Защелкивающийся вход ведет себя подобно защелкивающейся кнопке. При щелчке на таком входе происходит переключение из выделенного состояния в невыделенное и обратно. В выделенном состоянии в некоторую глобальную переменную (указанную параметром -variable) заносится значение, фиксированное параметром -onvalue; при отмене выделения в эту глобальную переменную заносится другое значение, фиксированное параметром -offvalue. Слева от метки защелкивающегося входа изображается квадратик-индикатор. Если вход выделен, то центральная часть индикатора окрашивается в цвет, указанный параметром -selectcolor для входа; в противном случае цвет индикатора совпадает с цветом фона меню. Если для данного входа задано значение параметра -command, то это значение интерпретируется как команда Tcl всякий раз при выделении входа.

ВХОДЫ-ПЕРЕКЛЮЧАТЕЛИ

Вход-переключатель ведет себя подобно примитиву переключателя. Входы переключателя разбиты на группы, причем в каждой группе выделенным может оказаться только один вход. При выделении конкретного входа в некоторую глобальную переменную (указанную параметром -variable) заносится значение, фиксированное параметром -value. В результате этого действия автоматически отменяется предыдущее выделение в той же группе. Любое изменение значения переменной, связанной с входом, автоматически приводит к отмене существующего выделения. Разбиение входов-переключателей на группы задается значениями связанных с ними переменных: два входа с одинаковыми значениями переменной принадлежат одной группе. Слева от метки входа-переключателя изображается ромб индикатора. Если вход выделен, то центральная часть индикатора окрашивается в цвет, указанный параметром -selectcolor для входа; в противном случае цвет индикатора совпадает с цветом фона меню. Если для данного входа задано значение параметра -command, то это значение интерпретируется как команда Tcl всякий раз при выделении входа.

КАСКАДНЫЕ ВХОДЫ

Каскадному входу отвечает новое меню (заданное параметром -menu). Каскадные входы позволяют строить ниспадающие меню. Команда примитива postcascade позволяет изобразить ассоциированное меню непосредственно рядом с каскадным входом или удалить выведенное меню. Для обеспечения корректности переключения меню необходимо, чтобы меню, ассоциированное с входом, было непосредственным потомком того меню, элементом которого данный вход является.

Каскадный вход выводит ассоциированное меню с помощью команды Tcl вида:

меню post x y
где меню представляет собой имя пути ассоциированного меню, а x и y это координаты верхнего правого угла окна каскадного входа относительно корневого окна. В системе Unix меню нижнего уровня стирается с помощью команды Tcl.
меню unpost
где меню представляет собой имя пути ассоциированного меню. На других платформах стирание меню осуществляется их собственными средствами.

Если для данного входа задано значение параметра -command, то это значение интерпретируется как команда Tcl всякий раз при выделении входа. В системе Windows данная возможность не поддерживается.

ВХОДЫ КЛЮЧИ ОТРЫВА

Ключ отрыва появляется в верхней части меню, если параметр tearOff имеет значение истина. В отличие от входов других типов его нельзя создать командой примитива add или удалить командой примитива delete. При создании ключа отрыва он изображается в виде пунктирной горизонтальной черты в верхней части окна. Привязки по умолчанию создают при щелчке на ключе отрыва оторванную копию меню и всех подчиненных ему меню.

ЛИНЕЙКА МЕНЮ

Любое меню можно использовать в качестве полосы меню для окна верхнего уровня (синтаксис см. в описании команды toplevel ). В системе Macintosh каскадные элементы меню появляются в полосе меню в верхней части окна, как только соответствующее окно верхнего уровня оказывается поверх остальных окон. В системах Windows и Unix эти элементы меню изображаются в полосе меню в верхней части окна. Поведение меню определяется особенностями интерфейса каждой из платформ. Для каждого меню, используемого в качестве полосы меню, создается его копия (clone menu). Подробное описание приведено ниже (см. "Клоны").

СПЕЦИАЛЬНЫЕ МЕНЮ В ЛИНЕЙКЕ

Некоторые меню в полосе меню будут обрабатываться особым образом. В системе Macintosh обеспечен доступ к специальным меню Apple и Help. В каждом окне системы Windows обеспечен доступ к меню Windows System. В системе X Windows предоставляется специальное меню подсказки, выравненное вправо. Во всех случаях эти меню создаются посредством команды, имя которой состоит из имени команды меню в полосе меню, к которому приписывается имя специального меню. Так, для полосы меню с именем .menubar на Macintosh именами специальных меню будут .menubar.apple и .menubar.help; в Windows .menubar.system; в X Windows именем меню подсказки будет .menubar.help.

Встречая меню Apple в системе Macintosh, Tk выводит его первые элементы на экран всякий раз, когда окно, содержащее полосу меню оказывается поверх остальных окон. Это меню является первым, которое видит пользователь, а его заголовком служит логотип Apple. После всех Tk-определенных элементов следует разделитель, за которым идут все элементы из папки пользователя Apple Menu Items. Так как используемая System процедура определения меню отлична от используемой в Tk и API системы не поддерживают всех возможностей меню Tk, в заголовке меню выводится только текст заголовка. Никаких дополнительных сведений, изображений, двуцветных изображений или цветов не выводится. Кроме того, ключ отрыва имеет вид "TearOff".

Встречая меню Help в системе Macintosh, Tk добавляет содержимое этого меню к стандартному меню подсказки в правой части пользовательской полосы меню всякий раз, когда пользовательская полоса меню оказывается поверх остальных окон. Первые элементы меню берутся из Apple. Аналогично меню Apple возможности вывода элементов меню ограничены системой.

Встречая меню System в системе Windows, Tk добавляет содержимое этого меню к системному меню, к которому привязана данная полоса меню. В этом меню имеется картинка, изображающая клавишу пробела; ее можно запустить с помощью "Мыши" или нажав клавиши Alt+Spacebar. Ограничения Windows API не позволяют вывести в системном меню различные шрифты, цвета, изображения или двуцветные изображения, а также ключи отрыва.

Встречая меню Help в системе X Windows, Tk делает его последним в полосе меню и выравнивает по правому краю.

КЛОНЫ

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

КОМАНДА ПРИМИТИВА

Команда menu создает новую команду Tcl с именем имяПути. С помощью этой команды можно выполнять различные операции над примитивом. Ее общий вид:

      имяПути параметр ?арг арг ...?
    

Параметр и аргументы уточняют поведение команды.

Одним из аргументов многих команд примитива меню служит указатель входа в меню, над которым следует произвести данную операцию. Такие указатели называются индексами; они могут иметь один из следующих видов:

число
Задает номер входа. Самый верхний вход имеет номер 0, следующий за ним номер 1 и т.д.
active
Задает вход, который активен в настоящий момент. Если активного входа нет, то это значение параметра эквивалентно значению none. Слово active нельзя сокращать.
end
Указывает самый нижний вход в меню. Если в меню нет ни одного входа, то это значение параметра эквивалентно значению none. Слово end нельзя сокращать.
last
Совпадает с end.
none
Указывает на "никакой" вход. Чаще всего используется совместно с параметром activate для дезактивации всех активных входов в меню. Слово none нельзя сокращать.
@число
В этом случае число интерпретируется как значение y-координаты в окне меню; указывает на вход, ближайший к данной y-координате. Так, например, "@0" указывает на самый верхний вход в окне.
образец
Если индекс не подходит ни под один из указанных видов, то используется поиск индекса по образцу. Сравнение метки входа с образцом выполняется последовательно сверху вниз, пока не встретится подходящая метка. При сравнении используются правила Tcl_StringMatch.

Примитивы меню допускают следующие команды:

имяПути activate индекс
Делает активным вход, указанный параметром индекс и соответственно меняет вид строки входа на экране. Всякий вход, бывший активным в момент выполнения команды, деактивизируется. Если индекс имеет значениеnone или если указанный этим параметром вход отключен, то по окончании работы команды в меню не будет активных входов. Возвращает пустую строку.
имяПути add тип ?параметр значение параметр значение?

Добавляет новый вход на верхушку меню. Аргумент тип задает вид нового входа; он может принимать значения cascade, checkbutton, command, radiobutton (эти значения допускают однозначные сокращения). Дополнительные аргументы могут задавать значения следующих параметров:

-activebackground значение
Задает цвет фона для вывода данного входа в активном состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметра activeBackground для всего меню. Если значение переменной tk_strictMotif требует проверки согласования со стандартом Motif, то значение данного параметра игнорируется и вместо него используется значение параметра -background. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-activeforeground значение
Задает цвет переднего плана для вывода данного входа в активном состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметра activeForeground для всего меню.Для входа-разделителя и ключа отрыва данный параметр недоступен.
-accelerator значение
Задает строку, которую следует выводить в правой части входа. Обычно описывает комбинацию клавиш, на которые следует нажать, чтобы выполнить те же действия, что и при обращении к данному входу. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-background значение
Задает цвет фона для вывода данного входа в нормальном (не активном и не отключенном) состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметра background для всего меню. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-bitmap значение
Задает двуцветное изображение, выводимое в меню вместо текстовой метки. Может принимать любое значение, воспринимаемое командой Tk_GetBitmap. Данный параметр подавляет параметр -label, однако если его значением является пустая строка, то в окне выводится текстовая метка. Параметр -image, если он задан, подавляет параметр -bitmap. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-columnbreak значение
Если значение параметра равно "0", то новый вход выводится после предыдущего входа. Если значение равно "1", то новый вход выводится вверху нового столбца меню.
-command значение
Задает команду Tcl, которую следует выполнить при вызове данного входа. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-font значение
Задает шрифт, используемый при выводе метки входа и строки горячих клавиш. Если значением параметра является пустая строка (как, например, по умолчанию), то используется значение параметра fontдля всего меню. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-foreground значение
Задает цвет переднего плана для вывода данного входа в нормальном (не активном и не отключенном) состоянии. Если значением служит пустая строка (как, например, по умолчанию), то в качестве цвета фона берется значение параметра foreground для всего меню. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-hidemargin значение
Указывает, следует ли при выводе данного входа выводить стандартные боковые поля. Такая возможность полезна при создании различных палитр с картинками (цветовые палитры, палитры образцов и т.д.). Значение "1" указывает на то, что поля должны быть спрятаны, при нулевом значении параметра они используются.
-image значение
Задает изображение, выводимое в меню вместо текстовой метки или двуцветного изображения. Изображение должно быть создано ранее командой image create. Данный параметр подавляет параметры -label, и -bitmap, однако если его значением является пустая строка, то в окне выводится текстовая метка или двуцветное изображение. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-indicatoron значение
Доступно только для защелкивающихся входов и входов-переключателей. Значение является булевским и указывает, следует или нет выводить индикатор входа.
-label значение
Задает текстовую строку, которая служит меткой-идентификатором входа. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-menu значение
Данный параметр доступен только для каскадных входов. Задает имя пути подменю, ассоциированного с данным входом. Подменю должно быть непосредственным потомком данного меню.
-offvalue значение
Доступен только для защелкивающихся входов. Задает значение, которое следует записать в переменную входа при отмене его выделения.
-onvalue значение
Доступен только для защелкивающихся входов. Задает значение, которое следует записать в переменную входа при его выделении.
-selectcolor значение
Доступен только для защелкивающихся входов и входов-переключателей. Задает значение, которое следует записать в переменную входа при его выделении.
-selectimage значение
Доступен только для защелкивающихся входов и входов-переключателей. Задает изображение, которое следует выводить в поле входа при его выделении (замещает параметр -image). Изображение должно быть создано ранее командойimage create. Если параметр -image не задан, то данный параметр игнорируется.
-state значение
Задает одно из трех состояний входа: normal, active или disabled. В нормальном состоянии при выводе входа используются значения параметров foreground для всего меню и background для входа или для всего меню. Обычно вход становится активным при попадании на него курсора. В активном состоянии при выводе входа используются значения параметров activeForeground для всего меню и activebackground для входа. В отключенном (disabled) состоянии вход становится безответным: привязки по умолчанию не позволяют активизировать его или вызвать соответствующую ему команду Tcl. При выводе входа в этом случае используются значения параметров disabledForeground для всего меню и background для входа. Для входа-разделителя данный параметр недоступен.
-underline значение
Задает целочисленный индекс символа в метке, который следует подчеркнуть. Значение этого индекса используется, в том числе, привязками по умолчанию для осуществления переключения с помощью клавиатуры. Значение "0" указывает на первый символ в строке, "1" на второй и т.д. Если в поле входа выводится изображение или двуцветное изображение, то данный параметр игнорируется. Для входа-разделителя и ключа отрыва данный параметр недоступен.
-value значение
Доступен только для входа-переключателя. Задает значение, которое следует записать в переменную входа при его выделении. Если значением параметра является пустая строка, то в переменную заносится значение параметра -label.
-variable значение
Доступен только для защелкивающегося входа и входа-переключателя. Задает имя глобальной переменной, которую следует установить при выделении входа. Для защелкивающегося входа значение переменной устанавливается также при отмене его выделения. Для входа-переключателя изменение значения переменной приводит к отмене текущего выделения.

Команда примитива add возвращает пустую строку.

имяПути cget параметр
Возвращает текущее значение параметра конфигурации с именем параметр. Параметрможет быть любым из параметров команды menu.
имяПути clone новоеИмяПути ?типКопии?
Создает копию текущего меню с именем новоеИмяПути. Копия является отдельным самостоятельным меню, однако любые изменения в ней приводят к таким же изменениям оригинала и наоборот. Аргумент типКопии может принимать значения normal, menubar и tearoff. Команду не следует исполнять вне библиотеки Tk. Подробную информацию см. "Клоны".
имяПути configure ?параметр? ?значение параметр значение ...?
Запрашивает значения параметров конфигурации примитива или изменяет их. Если параметр не указан, то возвращает список, содержащий значения всех допустимых в имениПути параметров (формат списка описан в Tk_ConfigureInfo). Если параметр задан, а его новое значение нет, то команда возвращает часть полного списка, относящуюся к указанному параметру. Если заданы одна или несколько пар параметр-значение, то указанным параметрам примитива присваиваются новые значения. В этом случае команда возвращает пустую строку. Параметр может быть любым из параметров команды menu.
имяПути delete индекс1 ?индекс2?
Удаляет все входы между входами, указанными аргументами индекс1 и индекс2, включая оба эти входа. Ключи отрыва при этом не удаляются для их удаления следует поменять значение параметра tearOff.
имяПути entrycget индекс параметр
Возвращает текущее значение параметра конфигурации для входа, заданного аргументом индекс. Параметрможет принимать любые значения, воспринимаемые командой примитива add.
имяПути entryconfigure индекс ?параметры?
Команда аналогична команде configure; отличие состоит в том, что она относится к параметрам отдельного входа, тогда как команда configure применима к параметрам меню в целом. Параметры могут принимать любые значения, воспринимаемые командой примитива add. Если параметры заданы, то им присваиваются вновь заданные и команда возвращает пустую строку. Если параметры не заданы, то команда возвращает список текущих значений всех параметров для каждого из входов, указанных аргументом индекс (формат списка приведен в Tk_ConfigureInfo).
имяПути index индекс
Команда возвращает числовое значение индекса, заданного аргументом индекс или значение none, если значением аргумента было none.
имяПути insert индекс тип ?параметр значение параметр значение?
Команда аналогична команде примитива add; отличие состоит в том, что команда insert вставляет новый вход непосредственно перед входом, на который указывает аргумент индекс, а не в конец меню. Если в меню есть ключ отрыва, то вставка входов перед ним невозможна.
имяПути invoke индекс
Выполняет действие, ассоциированное с данным входом меню. Подробное описание выполняемых действий приведено выше при описании конкретных типов входов. Если с данным входом ассоциирована какая-нибудь команда Tcl, то команда invoke возвращает результат выполнения этой команды Tcl. В противном случае результатом служит пустая строка. Замечание: при исполнении данной команды меню не пропадает автоматически это результат действия привязок по умолчанию перед исполнением команды invoke.
имяПути post x y
Обеспечивает вывод меню на экран в месте с координатами x и y относительно корневого окна. При необходимости эти координаты корректируются так, чтобы меню на экране было видно. Обычно команда возвращает пустую строку. Если задан параметр postCommand, то его значение интерпретируется как Tcl скрипт, который и исполняется перед выполнением команды post; в этом случае команда примитива post возвращает результат данного скрипта Tcl. Если при выполнении скрипта возникла ошибка, то post возвращает сообщение об этой ошибке и меню не выводится.
имяПути postcascade индекс
Выводит подменю, вызываемое каскадным входом, указанным аргументом индекс, и стирает ранее выведенное подменю. Если аргумент индекс не указывает на каскадный вход или если меню с именем имяПути не выведено, то командаpostcascade не производит никаких действий за исключением стирания ранее выведенных подменю.
имяПути type индекс
Возвращает тип входа, указанного аргументом индекс. Этот тип задается аргументом тип при создании входа командой примитива add (например, command, separator или tearoff для ключа отрыва).
имяПути unpost
Стирает окно с экрана. Если было выведено каскадное меню нижнего уровня, то стирает это меню. Возвращает пустую строку. На платформах Windows и Macintosh эта команда не работает, так как там имеются собственные системы управления окнами.
имяПути yposition индекс
Возвращает десятичное значение y-координаты в окне меню верхнего пиксела поля входа, заданного аргументом индекс.

КОНФИГУРАЦИИ МЕНЮ

Привязки по умолчанию обеспечивают четыре различных способа использования меню:

Ниспадающие меню в полосе меню
Наиболее часто встречающийся случай. Сначала создается примитив меню, который станет полосой меню. Затем к этому меню добавляются каскадные входы, описывающие нужные ниспадающие меню. Затем создаются все ниспадающие меню. Когда все это проделано, нужно задать значение параметра -menu в команде примитива верхнего уровня. Подробное описание toplevel.
Ниспадающие меню в кнопках меню
Это альтернативный способ создания полосы меню. Сначала создается примитив кнопки меню для каждого меню верхнего уровня (обычно цепочка кнопок располагается последовательно в полосе меню окна). Кроме того следует создать все меню верхнего уровня и подчиненные им меню и связать их вместе с помощью параметра -menu в кнопках меню и каскадных входах меню. Меню верхнего уровня должно быть непосредственным потомком кнопки меню, а каждое подменю должно быть непосредственным потомком меню, которое на него ссылается. После того, как это сделано, привязки по умолчанию позволяют пользователю переходить от одного меню к другому и обращаться к дереву меню через кнопку меню.
Всплывающие меню
Всплывающие меню обычно выводятся при нажатии кнопки "Мыши" или клавиши на клавиатуре. Сначала создаются всплывающие меню и все каскадные подменю, затем в нужный момент времени следует вызвать процедуру tk_popup, в результате чего будет выведено меню верхнего уровня.
Меню-переключатели с кнопкой
Меню-переключатель состоит из кнопки и связанного с ней меню, которое позволяет выбрать одну из нескольких возможностей. Описатель выбранной возможности выводится в кнопке и в глобальной переменной запоминается соответствующее значение. Для создания меню-переключателей используется процедура tk_optionMenu.
Отрывные меню
Отрывное меню создается при исполнении входа ключа отрыва в верхней части имеющегося меню. Привязки по умолчанию создают копию исходного меню и выводят ее в виде окна верхнего уровня. Оторванное меню ведет себя точно так же, как и исходное.

ПАРАМЕТРЫ ПО УМОЛЧАНИЮ

При создании меню Tk автоматически создает параметры класса, определяющие следующее поведение примитива по умолчанию:

При попадании курсора "Мыши" в меню вход, на котором находится курсор, становится активным; при перемещении курсора по меню соответственно меняется и активный вход.

Если курсор "Мыши" покидает меню, то все входы в нем деактивизируются за исключением случая, когда курсор перемещается в каскадное подменю.

При отпускании клавиши "Мыши" на меню активный вход (если таковой имеется) исполняется. При этом меню стирается за исключением случая, когда это оторванное меню.

Нажатие на клавиши Space или Return приводят к исполнению активного входа и стиранию меню.

Если одна из букв в поле входа подчеркнута с помощью параметра -underline, то нажатие на эту букву (или ее эквивалент на верхнем или нижнем регистре) приводит к исполнению входа и стиранию меню.

Нажатие на клавишу Escape приводит к отмене текущего выделения. Меню при этом стирается, если только это не оторванное меню.

Нажатие на клавиши Up или Down приводит к активизации входа, примыкающего к текущему активному входу сверху или снизу. Если достигнут конец меню, то происходит перескок на противоположный его конец.

Нажатие на клавишу Left приводит к переходу на соседнее слева меню. Если текущее меню представляет собой каскадное подменю, то это каскадное подменю стирается и текущим входом в меню становится каскадный вход в его непосредственном предке. Если текущее меню представляет собой меню верхнего уровня, выведенное кнопкой меню, то текущая кнопка меню стирается и выводится соседняя слева кнопка меню. В остальных случаях нажатие на эту клавишу не приводит ни к какому результату. Порядок кнопок меню слева направо определяется их порядком в стеке: Tk считает нижнюю кнопку меню (первой попавшую в стек) самой левой.

Нажатие на клавишу Right приводит к переходу на соседнее справа меню. Если текущим является каскадный вход, то выводится соответствующее каскадное подменю и текущий вход становится первым в этом подменю. В противном случае, если текущее меню было выведено кнопкой меню, то текущая кнопка меню стирается, а вместо нее выводится соседняя с ней справа кнопка меню.

Отключенные входы меню остаются безответными: их нельзя сделать активными и они не реагируют на нажатие и отпускание клавиш "Мыши".

Определяя новые привязки к отдельным примитивам или переопределяя привязки класса, поведение меню можно изменить.

В настоящее время использование базы данных параметров для задания значений параметров входов не допускается.