Создание меню и подменю 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
)
Похожие посты
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *