===== 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 |}}