Главная


16. Виджет Menubutton (Кнопка меню)

Menubutton - это часть выпадающего меню, которая постоянно находится на экране. Каждый menubutton связан с виджетом Menu (см. выше), который может отображать пункты меню для этого menubutton, когда пользователь нажимает на него.

Чтобы создать Кнопку Меню в корневом окне или фрейме parent:

w = tk.Menubutton(parent, option, ...)

Конструктор возвращает новый виджет Menubutton. Опции:

Таблица 25. Опции виджета Menubutton

activebackground Цвет фона при наведении мыши на Menubutton. См. Раздел 5.3, "Цвета".
activeforeground Цвет переднего плана цвет, когда мышь находится над menubutton.
anchor Эта опция определяет, где будет располагаться текст, если виджет имеет больше места, чем требуется для текста. По умолчанию используется anchor=tk.CENTER, который выравнивает текст по центру. Другие параметры см. в Раздел 5.5, "Якоря". Например, если вы используете anchor=tk.W, текст будет отцентрирован относительно левой стороны виджета.
bg или background Цвет фона, когда мышь не находится над menubutton.
bitmap Чтобы отобразить битмап на menubutton, установите этот параметр на имя битмапа; смотрите Раздел 5.7, "Битовые изображения".
bd или borderwidth Ширина границы вокруг menubutton. По умолчанию - два пикселя. Возможные значения см. в Раздел 5.1, "Размеры".
compound Если вы указываете и текст, и графику (битмап или изображение), этот параметр определяет, где отображается графика относительно текста. Возможные значения: tk.NONE (значение по умолчанию), tk.TOP, tk.BOTTOM, tk.LEFT, tk.RIGHT и tk.CENTER. Например, compound=tk.RIGHT будет позиционировать графику справа от текста. Если вы укажете compound=tk.NONE, графика будет отображаться, но text (если таковой имеется) не будет.
cursor Курсор, который появляется при наведении мыши на этот menubutton. См. Раздел 5.8, "Курсоры".
direction Эта опция определяет в каком направлении будет расположено меню относительно menubutton. Обычно меню отображается под menubutton. Установите direction=tk.LEFT для отображения меню слева от кнопки; используйте direction=tk.RIGHT для отображения меню справа от кнопки; или используйте direction='above' для размещения меню над кнопкой.
disabledforeground Цвет переднего плана color, отображаемый на этой menubutton, когда она отключена.
fg или foreground Цвет переднего плана color, когда мышь не находится над menubutton.
font Указывает шрифт, используемый для отображения текста; см. Раздел 5.4, "Шрифты".
height Высота menubutton в строках текста (не в пикселях!). По умолчанию размер menubutton соответствует его содержимому.
highlightbackground Цвет фокусного выделения, когда виджет не имеет фокуса. См. Раздел 53, "Фокус: маршрутизация ввода с клавиатуры".
highlightcolor Цвет, отображаемый в подсветке фокуса, когда виджет имеет фокус.
highlightthickness Толщина выделения фокусного выделения.
image Чтобы отобразить изображение на этом menubutton, установите этот параметр для объекта Image. См. Раздел 5.9, "Изображения".
justify Этот параметр управляет расположением текста, когда текст не заполняет всё пространство в menubutton: используйте justify=tk.LEFT, чтобы выровнять текст по левому краю (это используется по умолчанию); используйте justify=tk.CENTER, чтобы выровнять его по центру, или justify=tk.RIGHT, чтобы выровнять по правому краю.
menu Чтобы связать menubutton с набором пунктов меню, установите этот параметр для объекта Menu, содержащего эти пункты меню. Этот объект меню должен быть создан путем передачи связанного с ним menubutton в конструктор в качестве первого аргумента. Ниже приведен пример, показывающий, как связать menubutton и меню.
padx Сколько места оставить слева и справа от текста menubutton. По умолчанию 1.
pady Сколько места оставить над и под текстом menubutton. По умолчанию равно 1.
relief Обычно кнопки menubutton имеют вид tk.RAISED. Другие трехмерные эффекты см. в Раздел 5.6, " Стили рельефа".
state Обычно кнопки menubutton реагируют на мышь. Установите state=tk.DISABLED, чтобы закрасить menubutton и сделать его не реагирующим на мышь.
takefocus Обычно кнопки menubutton не принимают фокус клавиатуры (см. Раздел 53, "Фокус: маршрутизация ввода с клавиатуры"). Используйте takefocus=True, чтобы добавить menubutton в очередь обхода фокуса.
text Чтобы отобразить текст на menubutton, установите этот параметр в строку, содержащую нужный текст. Новые строки ('\n') в строке будут вызывать разрывы строк.
textvariable Вы можете связать управляющую переменную класса StringVar с этой menubutton. Установка этой управляющей переменной изменит отображаемый текст. См. раздел [Раздел 52, "Управляющие переменные: значения, скрывающиеся за виджетами"] (control-variables.html).
underline Обычно под текстом на menubutton не появляется подчеркивание. Чтобы подчеркнуть один из символов, установите этот параметр на индекс этого символа.
width Ширина menubutton в символах (не пикселях!). Если этот параметр не задан, размер кнопки будет соответствовать её содержимому.
wraplength Обычно строки не переносятся. Вы можете задать число символов, и все строки будут разбиты на фрагменты не длиннее этого числа.

Вот краткий пример создания menubutton и связанного с ним меню с двумя чекбоксами:

self.mb = tk.Menubutton(self, text='condiments',
                         relief=RAISED)
self.mb.grid()

self.mb.menu = tk.Menu(self.mb, tearoff=0)
self.mb['menu'] = self.mb.menu

self.mayoVar  = tk.IntVar()
self.ketchVar = tk.IntVar()
self.mb.menu.add_checkbutton(label='mayo',
    variable=self.mayoVar)
self.mb.menu.add_checkbutton(label='ketchup',
    variable=self.ketchVar)

Этот пример создает menubutton с меткой condiments. При нажатии на нее выпадают две кнопки с надписями mayo и ketchup.


>> Виджет Message