Если приложение содержит много функций, необходимо использовать меню для их организации и упрощения навигации.
Обычно вы используете меню для группировки тесно связанных операций. Например, вы можете найти меню Файл в большинстве текстовых редакторов.
Tkinter изначально поддерживает меню. Он отображает меню с внешним видом и поведением целевой платформы, на которой работает программа, например, Windows, macOS и Linux.
Рассмотрим, как создать панель меню Tkinter, добавить меню в панель меню и добавить пункты меню в каждое меню в Python.
Создание простого меню
- Сначала создайте корневое окно и задайте для него заголовок «Menu Demo»:
root = tk.Tk()
root.title('Menu Demo')
- Во-вторых, создайте строку меню (menubar) и назначьте ее пункту menu корневого окна (root):
menubar = Menu(root) root.config(menu=menubar)
Обратите внимание, что каждое окно верхнего уровня может иметь только одну строку меню.
- В-третьих, создайте File menu, контейнером которого будет menubar:
file_menu = Menu(menubar)
- В-четвертых, добавьте пункт меню в file_menu:
file_menu.add_command(
label="Exit",
command=root.destroy,
)
В этом примере метка пункта меню — Exit.
При нажатии на пункт меню «Exit» Python автоматически вызовет метод root.destroy(), чтобы закрыть корневое окно.
Наконец, добавьте File menu в строку меню:
menubar.add_cascade(
label="File",
menu=file_menu,
underline=0
)
Параметр подчеркивания позволяет создать сочетание клавиш. Он определяет позицию символа, который следует подчеркнуть.
Обратите внимание, что позиция начинается с нуля. В этом примере мы указываем ее как первый символ, который является F. И вы можете выбрать ее с помощью сочетания клавиш Alt+F.
Соединим все вместе:
import tkinter as tk
from tkinter import Menu
# root window
root = tk.Tk()
root.title('Menu Demo')
# create a menubar
menubar = Menu(root)
root.config(menu=menubar)
# create a menu
file_menu = Menu(menubar)
# add a menu item to the menu
file_menu.add_command(
label="Exit",
command=root.destroy
)
# add the File menu to the menubar
menubar.add_cascade(
label="File",
menu=file_menu
)
root.mainloop()
Выход:

По умолчанию Tkinter добавляет пунктирную линию перед первым пунктом меню. При щелчке по пунктирной линии главное окно отделит от нее меню следующим образом:

Чтобы удалить пунктирную линию, можно установить свойство tearoff меню на значение False:
file_menu = Menu(menubar, tearoff=False)
Выход:

Создание более сложного меню
Следующая программа иллюстрирует, как создать строку меню, добавить меню Файл и Справка в строку меню. Кроме того, она добавляет несколько пунктов меню в эти меню:
from tkinter import Tk, Frame, Menu
# root window
root = Tk()
root.geometry('320x150')
root.title('Menu Demo')
# create a menubar
menubar = Menu(root)
root.config(menu=menubar)
# create the file_menu
file_menu = Menu(
menubar,
tearoff=0
)
# add menu items to the File menu
file_menu.add_command(label="New")
file_menu.add_command(label="Open...")
file_menu.add_command(label="Close")
file_menu.add_separator()
# add Exit menu item
file_menu.add_command(
label="Exit",
command=root.destroy
)
# add the File menu to the menubar
menubar.add_cascade(
label="File",
menu=file_menu
)
# create the Help menu
help_menu = Menu(
menubar,
tearoff=0
)
help_menu.add_command(label="Welcome")
help_menu.add_command(label="About...")
# add the Help menu to the menubar
menubar.add_cascade(
label="Help",
menu=help_menu
)
root.mainloop()
Выход:

Единственным новым оператором в этой программе является использование метода add_separator() для добавления разделителя в меню.
Добавление подменю
Следующая программа добавляет пункт меню «Настройки» в меню «Файл» и создает подменю, связывающее новый пункт меню:
from tkinter import Tk, Menu
# root window
root = Tk()
root.geometry('320x150')
root.title('Menu Demo')
# create a menubar
menubar = Menu(root)
root.config(menu=menubar)
# create the file_menu
file_menu = Menu(
menubar,
tearoff=0
)
# add menu items to the File menu
file_menu.add_command(label="New")
file_menu.add_command(label="Open...")
file_menu.add_command(label="Close")
file_menu.add_separator()
# add a submenu
sub_menu = Menu(file_menu, tearoff=0)
sub_menu.add_command(label="Keyboard Shortcuts")
sub_menu.add_command(label="Color Themes")
# add the File menu to the menubar
file_menu.add_cascade(
label="Preferences",
menu=sub_menu
)
# add Exit menu item
file_menu.add_separator()
file_menu.add_command(
label="Exit",
command=root.destroy
)
menubar.add_cascade(
label="File",
menu=file_menu,
underline=0
)
# create the Help menu
help_menu = Menu(
menubar,
tearoff=0
)
help_menu.add_command(label="Welcome")
help_menu.add_command(label="About...")
# add the Help menu to the menubar
menubar.add_cascade(
label="Help",
menu=help_menu,
underline=0
)
root.mainloop()
Выход:

Как это работает.
Следующий код добавляет подменю в меню «Файл» и связывает подменю с пунктом меню «Настройки»:
# add a submenu
sub_menu = Menu(file_menu, tearoff=0)
sub_menu.add_command(label="Keyboard Shortcuts")
sub_menu.add_command(label="Color Themes")
# add the File menu to the menubar
file_menu.add_cascade(
label="Preferences",
menu=sub_menu
) 