Использование виджетов Menubutton и Optionmenu

ispolzovanie vidzhetov menubutton i optionmenu Экскурсия по tkinter, часть 2

В действительности меню, основанные на Menubutton, являются еще более универсальными, чем следует из примера 9.3, — они могут появляться в любом месте интерфейса, где может располагаться обычная кнопка, а не только в строке меню во фрейме Frame. В примере 9.6 создается раскрывающийся список Menubutton, который отображается самостоятельно и прикреплен к корневому окну. На рис. 9.8 приведен графический интерфейс, создаваемый этим примером.

Пример 9.6. PP4E\Gui\Tour\mbutton.py

from tkinter import *

root = Tk()

mbutton = Menubutton(root, text=’Food’) # отдельное раскрывающееся меню picks = Menu(mbutton)

mbutton.config(menu=picks)

picks.add_command(label=’spam’, command=root.quit) picks.add_command(label=’eggs’, command=root.quit) picks.add_command(label=’bacon’, command=root.quit) mbutton.pack()

mbutton.config(bg=’white’, bd=4, relief=RAISED)

root.mainloop()

В библиотеке tkinter имеется родственный виджет Optionmenu, который отображает выбранный элемент раскрывающегося меню. Он похож на Menubutton, к которому добавлена метка, и при щелчке на нем выводит меню вариантов выбора. Однако, чтобы получить результат выбора, нужно не регистрировать обработчик, а связывать переменные tkinter (описанные в главе 8), при этом элементы меню передаются конструктору в виде аргументов вслед за переменной.

Рис. 9.8. Виджет Menubutton сам по себе

 

Пример 9.7 иллюстрирует типичное использование виджета Optionmenu и создает интерфейс, изображенный на рис. 9.9. Щелчок на любой из первых двух кнопок открывает раскрывающееся меню. Щелчок на третьей кнопке state выводит текущие значения, отображаемые на первых двух.

Пример 9.7. PP4E\Gui\Tour\optionmenu.py

from tkinter import *

root = Tk()

var1 = StringVar()

var2 = StringVar()

opt1 = OptionMenu(root, var1, ‘spam’, ‘eggs’, ‘toast’) # как и Menubutton, opt2 = OptionMenu(root, var2, ‘ham’, ‘bacon’, ‘sausage’) # но отображает opt1.pack(fill=X) # выбранный вариант

opt2.pack(fill=X) var1.set(‘spam’) var2.set(‘ham’)

def state(): print(var1.get(), var2.get()) # связанные переменные

Button(root, command=state, text=’state’).pack() root.mainloop()

Рис. 9.9. Виджет Optionmenu в действии

 

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

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

Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011

Оцените статью
Секреты программирования
Добавить комментарий