Для создания иерархического меню в tkinter и Python применяется виджет Menu.
Меню может содержать много элементов, причем эти элементы сами могут представлять меню и содержать другие элементы. В зависимости от того, какой тип элементов мы хотим добавить в меню, будет отличаться метод, используемый для их добавления. В частности, нам доступны следующие методы:
- add_command(options): добавляет элемент меню через параметр options
- add_cascade(options): добавляет элемент меню, который в свою очередь может представлять подменю
- add_separator(): добавляет линию-разграничитель
- add_radiobutton(options): добавляет в меню переключатель
- add_checkbutton(options): добавляет в меню флажок
Создадим простейшее меню:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | from tkinter import * root = Tk()root.title("GUI на Python")root.g |
Для добавления пунктов меню у объекта Menu вызывается метод add_cascade(). В этот метод передаются параметры пункта меню, в данном случае они представлены текстовой меткой, устанавливаемой через параметр label.
Но просто создать меню – еще недостаточно. Его надо установить для текущего окна с помощью параметра menu в методе config(). В итоге графическое окно будет иметь следующее меню:

Теперь добавим подменю:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | |
Здесь определяется подменю file_menu, которое добавляется в первый пункт основного меню благодаря установке опции menu=file_menu:
| 1 | main_menu.add_cascade(label="File", menu=file_menu) |

Если необходимо настроить меню, то мы можем задать в конструкторе Menu следующие опции:
- activebackground: цвет активного пункта меню
- activeborderwidth: толщина границы активного пункта меню
- activeforeground: цвет текста активного пункта меню
- bg: фоновый цвет
- bd: толщина границы
- cursor: курсор указателя мыши при наведении на меню
- disabledforeground: цвет, когда меню находится в состоянии DISABLED
- font: шрифт текста
- fg: цвет текста
- tearoff: меню может быть отсоединено от графического окна. В частности, при создании подменю а скриншоте можно увидеть прерывающуюся линию в верху подменю, за которую его можно отсоединить. Однако при значении
tearoff=0подменю не сможет быть отсоединено.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from tkinter import * root = Tk()root.title("GUI на Python")root.geometry("300x250") main_menu = Menu() file_menu = Menu(fo |

Взаимодействие с меню
Отличительной особенностью элементов меню является способность реагировать на нажатия пользователя. Для этого у каждого элемента меню можно задать параметр command, который устанавливает ссылку на функцию, выполняемую при нажатии.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | from tk |