Создание меню и подменю Tkinter в Python
Если приложение содержит много функций, необходимо использовать меню для их организации и упрощения навигации.
Обычно вы используете меню для группировки тесно связанных операций. Например, вы можете найти меню Файл в большинстве текстовых редакторов.
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 )