===== Menu =====
Цель этого виджета - позволить нам создавать всевозможные меню, которые могут использоваться нашими приложениями. Основные функциональные возможности обеспечивают способы создания трех типов меню: всплывающее окно, верхний уровень и раскрывающийся список.
Также возможно использовать другие расширенные виджеты для реализации новых типов меню, таких как виджет OptionMenu, который реализует специальный тип, который генерирует всплывающий список элементов в выделении.
==== Синтаксис ====
от простой синтаксис для создания этого виджета -
w = Menu ( master, option, ... )
==== Параметры ====
* **master** - Это представляет родительское окно.
* **options** - Вот список наиболее часто используемых параметров для этого виджета. Эти параметры можно использовать как пары ключ-значение, разделенные запятыми.
^№^Опции и Описание|
|1|**activebackground** \\ Цвет фона, который будет отображаться при выборе, когда он находится под мышью.|
|2|**activeborderwidth** \\ Определяет ширину границы, нарисованной вокруг выбора, когда он находится под мышью. По умолчанию 1 пиксель.|
|3|**activeforeground** \\ Цвет переднего плана, который будет отображаться при выборе, когда он находится под мышью.|
|4|**bg** \\ Цвет фона для выбора не под мышью.|
|5|**bd** \\ Ширина границы вокруг всех вариантов. По умолчанию 1.|
|6|**cursor** \\ Курсор, который появляется, когда мышь находится над выбором, но только когда меню было оборвано.|
|7|**disabledforeground** \\ Цвет текста для элементов, состояние которых DISABLED.|
|8|**font** \\ Шрифт по умолчанию для выбора текста.|
|9|**fg** \\ Цвет переднего плана используется для выбора не под мышью.|
|10|**postcommand** \\ Вы можете установить эту опцию для процедуры, и эта процедура будет вызываться каждый раз, когда кто-то вызывает это меню.|
|11|**relief** \\ 3-D эффект по умолчанию для меню relief = RAISED.|
|12|**image** \\ Для отображения изображения в этом меню.|
|13|**selectcolor** \\ Определяет цвет, отображаемый в флажках и радиокнопках, когда они выбраны.|
|14|**tearoff** \\ Обычно меню может быть оторвано, первая позиция (позиция 0) в списке вариантов выбора занята элементом отрыва, а дополнительные варианты добавляются, начиная с позиции 1. Если вы установили tearoff = 0, в меню не будет функции отрыва, и варианты будут добавлены, начиная с позиции 0.|
|15|**title** \\ Обычно заголовок окна отрывного меню будет таким же, как текст меню или каскада, которые ведут к этому меню. Если вы хотите изменить заголовок этого окна, установите параметр title для этой строки.|
===== Methods =====
Эти методы доступны на объектах меню -
^№^Опции и Описание|
|1|**add_command (options)** \\ Добавляет пункт меню в меню.|
|2|**add_radiobutton( options )** \\ Создает пункт меню переключателя.|
|3|**add_checkbutton( options )** \\ Создает пункт меню кнопки проверки.|
|4|**add_cascade(options)** \\ Создает новое иерархическое меню, связывая данное меню с родительским меню|
|5|**add_separator()** \\ Добавляет разделительную линию в меню.|
|6|**add( type, options )** \\ Добавляет определенный тип пункта меню в меню.|
|7|**delete( startindex [, endindex ])** \\ Удаляет пункты меню в диапазоне от начального индекса до конечного индекса.|
|8|**entryconfig( index, options )** \\ Позволяет изменить пункт меню, который идентифицируется индексом, и изменить его параметры.|
|9|**index(item)** \\ Возвращает порядковый номер данной метки пункта меню.|
|10|**insert_separator ( index )** \\ Вставьте новый разделитель в положение, указанное индексом.|
|11|**invoke ( index )** \\ Вызывает команду обратного вызова, связанную с выбором по индексу позиции. Если кнопка проверки, ее состояние переключается между установленным и очищенным; если кнопка радио, этот выбор установлен.|
|12|**type ( 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()
{{ :python:оконное_приложение:tkinter:menu1.jpg?200 |}}
===Выпадающее каскадное меню===
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()
{{ :python:оконное_приложение:tkinter:menu2.png?200 |}}
====Меняем тему редактора в меню====
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()
{{ :python:оконное_приложение:tkinter:menu3.png?300 |}}