Цель этого виджета - позволить нам создавать всевозможные меню, которые могут использоваться нашими приложениями. Основные функциональные возможности обеспечивают способы создания трех типов меню: всплывающее окно, верхний уровень и раскрывающийся список.
Также возможно использовать другие расширенные виджеты для реализации новых типов меню, таких как виджет OptionMenu, который реализует специальный тип, который генерирует всплывающий список элементов в выделении.
от простой синтаксис для создания этого виджета -
w = Menu ( master, option, ... )
^№^Опции и Описание|
| 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 для этой строки. |
Эти методы доступны на объектах меню -
| № | Опции и Описание |
|---|---|
| 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()
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()