Содержание

Цель этого виджета - позволить нам создавать всевозможные меню, которые могут использоваться нашими приложениями. Основные функциональные возможности обеспечивают способы создания трех типов меню: всплывающее окно, верхний уровень и раскрывающийся список.

Также возможно использовать другие расширенные виджеты для реализации новых типов меню, таких как виджет OptionMenu, который реализует специальный тип, который генерирует всплывающий список элементов в выделении.

Синтаксис

от простой синтаксис для создания этого виджета -

 w = Menu ( master, option, ... )

Параметры

^№^Опции и Описание|

1activebackground
Цвет фона, который будет отображаться при выборе, когда он находится под мышью.
2activeborderwidth
Определяет ширину границы, нарисованной вокруг выбора, когда он находится под мышью. По умолчанию 1 пиксель.
3activeforeground
Цвет переднего плана, который будет отображаться при выборе, когда он находится под мышью.
4bg
Цвет фона для выбора не под мышью.
5bd
Ширина границы вокруг всех вариантов. По умолчанию 1.
6cursor
Курсор, который появляется, когда мышь находится над выбором, но только когда меню было оборвано.
7disabledforeground
Цвет текста для элементов, состояние которых DISABLED.
8font
Шрифт по умолчанию для выбора текста.
9fg
Цвет переднего плана используется для выбора не под мышью.
10postcommand
Вы можете установить эту опцию для процедуры, и эта процедура будет вызываться каждый раз, когда кто-то вызывает это меню.
11relief
3-D эффект по умолчанию для меню relief = RAISED.
12image
Для отображения изображения в этом меню.
13selectcolor
Определяет цвет, отображаемый в флажках и радиокнопках, когда они выбраны.
14tearoff
Обычно меню может быть оторвано, первая позиция (позиция 0) в списке вариантов выбора занята элементом отрыва, а дополнительные варианты добавляются, начиная с позиции 1. Если вы установили tearoff = 0, в меню не будет функции отрыва, и варианты будут добавлены, начиная с позиции 0.
15title
Обычно заголовок окна отрывного меню будет таким же, как текст меню или каскада, которые ведут к этому меню. Если вы хотите изменить заголовок этого окна, установите параметр title для этой строки.

Methods

Эти методы доступны на объектах меню -

Опции и Описание
1add_command (options)
Добавляет пункт меню в меню.
2add_radiobutton( options )
Создает пункт меню переключателя.
3add_checkbutton( options )
Создает пункт меню кнопки проверки.
4add_cascade(options)
Создает новое иерархическое меню, связывая данное меню с родительским меню
5add_separator()
Добавляет разделительную линию в меню.
6add( type, options )
Добавляет определенный тип пункта меню в меню.
7delete( startindex [, endindex ])
Удаляет пункты меню в диапазоне от начального индекса до конечного индекса.
8entryconfig( index, options )
Позволяет изменить пункт меню, который идентифицируется индексом, и изменить его параметры.
9index(item)
Возвращает порядковый номер данной метки пункта меню.
10insert_separator ( index )
Вставьте новый разделитель в положение, указанное индексом.
11invoke ( index )
Вызывает команду обратного вызова, связанную с выбором по индексу позиции. Если кнопка проверки, ее состояние переключается между установленным и очищенным; если кнопка радио, этот выбор установлен.
12type ( index ) Возвращает тип, указанный индексом: либо «cascade», «checkbutton», «command», «radiobutton», «separator», or «tearoff».

Примеры

Выпадающее меню

from tkinter import *
def donothing():
   filewin = Toplevel(root)
   button = Button(filewin, text="Do nothing button")
   button.pack()
 
root = Tk()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff = 0)
filemenu.add_command(label="New", command = donothing)
filemenu.add_command(label = "Open", command = donothing)
filemenu.add_command(label = "Save", command = donothing)
filemenu.add_command(label = "Save as...", command = donothing)
filemenu.add_command(label = "Close", command = donothing)
 
filemenu.add_separator()
 
filemenu.add_command(label = "Exit", command = root.quit)
menubar.add_cascade(label = "File", menu = filemenu)
editmenu = Menu(menubar, tearoff=0)
editmenu.add_command(label = "Undo", command = donothing)
 
editmenu.add_separator()
 
editmenu.add_command(label = "Cut", command = donothing)
editmenu.add_command(label = "Copy", command = donothing)
editmenu.add_command(label = "Paste", command = donothing)
editmenu.add_command(label = "Delete", command = donothing)
editmenu.add_command(label = "Select All", command = donothing)
 
menubar.add_cascade(label = "Edit", menu = editmenu)
helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label = "Help Index", command = donothing)
helpmenu.add_command(label = "About...", command = donothing)
menubar.add_cascade(label = "Help", menu = helpmenu)
 
root.config(menu = menubar)
root.mainloop()

Выпадающее каскадное меню

from tkinter import *
 
def aboutProgramm():
    print('about')
 
root = Tk()
root.geometry('400x400')
 
# Создаем меню
main_menu = Menu(root)
root.config(menu=main_menu)
 
# Меню файл
file_menu = Menu(main_menu, tearoff=0)
file_menu.add_command(label='Открыть')
file_menu.add_command(label='Сохранить')
file_menu.add_separator()
file_menu.add_command(label='Выход')
main_menu.add_cascade(label='File', menu=file_menu)
 
# Меню help
help_menu = Menu(main_menu, tearoff=0)
help_menu_sub = Menu(help_menu, tearoff=0)
help_menu_sub.add_command(label='онлайн')
help_menu_sub.add_command(label='офлайн')
help_menu.add_cascade(label='Помощь', menu=help_menu_sub)
help_menu.add_command(label='О программе', command=aboutProgramm)
main_menu.add_cascade(label='Help', menu=help_menu)
 
# Создаем фрейм для текстового ввода
f_text = Frame(root)
f_text.pack(fill=BOTH, expand=1)
 
# Поле ввода
t = Text(f_text,
         bg="#343D46",
         fg="#c6dec1",
         padx=10,  # отступ по оси x
         pady=10,  # отступ по оси y
         wrap=WORD,  # Перенос слов
         insertbackground="#EDA756",  # цвет курсора
         selectbackground="#4E5A65",  # цвет выделения
         spacing3=10,  # Расстояние между строк
         width=30)
t.pack(fill=BOTH, expand=1, side=LEFT)
 
# Создаем скроллбар
scroll = Scrollbar(f_text, command=t.yview)  # Создаем скролл по оси y
scroll.pack(fill=Y, side=LEFT)
t.config(yscrollcommand=scroll.set)
 
root.mainloop()

Меняем тему редактора в меню

from tkinter import *
 
 
theme_colors = {
    'dark':{
         'text_bg':"#343D46", # цвет фона
         'text_fg':"#ffffff", # цвет текста
         'cursor': "#EDA756",  # цвет курсора
         'select_bg':"#4E5A65" # цвет выделения
    },
    'light':{
        'text_bg': "#ffffff",  # цвет фона
        'text_fg': "#000000",  # цвет текста
        'cursor': "#8000ff",  # цвет курсора
        'select_bg': "#777777"  # цвет выделения
    }
 
}
 
def changeTheme(theme):
    t['bg'] = theme_colors[theme]['text_bg']
    t['fg'] = theme_colors[theme]['text_fg']
    t['insertbackground'] = theme_colors[theme]['cursor']
    t['selectbackground'] = theme_colors[theme]['select_bg']
 
 
def aboutProgramm():
    print('about')
 
root = Tk()
root.geometry('400x400')
 
# Создаем меню
main_menu = Menu(root)
root.config(menu=main_menu)
 
# Меню файл
file_menu = Menu(main_menu, tearoff=0)
file_menu.add_command(label='Открыть')
file_menu.add_command(label='Сохранить')
file_menu.add_separator()
file_menu.add_command(label='Выход')
main_menu.add_cascade(label='File', menu=file_menu)
 
# Меню theme
theme_menu = Menu(main_menu, tearoff=0)
theme_menu_sub = Menu(theme_menu, tearoff=0)
theme_menu_sub.add_command(label='Светлая тема', command = lambda : changeTheme('light'))
theme_menu_sub.add_command(label='Темная тема', command = lambda : changeTheme('dark'))
theme_menu.add_cascade(label='Темы', menu=theme_menu_sub)
theme_menu.add_command(label='О программе', command=aboutProgramm)
main_menu.add_cascade(label='Разное', menu=theme_menu)
 
# Создаем фрейм для текстового ввода
f_text = Frame(root)
f_text.pack(fill=BOTH, expand=1)
 
# Поле ввода
t = Text(f_text,
         bg=theme_colors['dark']['text_bg'],
         fg=theme_colors['dark']['text_fg'],
         padx=10,  # отступ по оси x
         pady=10,  # отступ по оси y
         wrap=WORD,  # Перенос слов
         insertbackground=theme_colors['dark']['cursor'],  # цвет курсора
         selectbackground=theme_colors['dark']['select_bg'],  # цвет выделения
         font=("Courier New", 12),
         spacing3=10,  # Расстояние между строк
         width=30)
t.pack(fill=BOTH, expand=1, side=LEFT)
 
# Создаем скроллбар
scroll = Scrollbar(f_text, command=t.yview)  # Создаем скролл по оси y
scroll.pack(fill=Y, side=LEFT)
t.config(yscrollcommand=scroll.set)
 
root.mainloop()