Виджет
Menu
в Tkinter предоставляет возможность создавать различные типы меню в графическом пользовательском интерфейсе (GUI), включая выпадающие меню, контекстные меню и панель меню.
Создание виджета Menu
включает в себя несколько этапов. Во-первых, необходимо создать объект Menu, затем можно добавить в него различные элементы. Ниже приведен базовый пример создания меню:
import tkinter as tk
root = tk.Tk()
menubar = tk.Menu(root)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=None)
filemenu.add_command(label="Save", command=None)
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
root.config(menu=menubar)
root.mainloop()
В этом примере мы создали главное меню menubar
, добавили в него подменю filemenu
с командами «Open», «Save» и «Exit». Важно отметить, что мы использовали метод add_cascade()
для добавления подменю в главное меню и метод add_command()
для добавления элементов в подменю. Кроме того, мы использовали tearoff=0
чтобы убрать пункт, позволяющий «оторвать» меню в отдельное окно, который есть по умолчанию.
Виджет Menu
поддерживает различные свойства (опции), которые можно использовать для настройки его внешнего вида и поведения. Ниже перечислены некоторые из них:
activebackground
: Цвет фона для пункта меню, когда он активирован.activeforeground
: Цвет текста для пункта меню, когда он активирован.bg
или background
: Цвет фона меню.cursor
: Курсор, который появляется, когда мышь наводится на элемент меню.font
: Шрифт текста элементов меню.fg
или foreground
: Цвет текста элементов меню.relief
: Тип рельефа, который применяется к элементу меню при наведении на него.tearoff
: Если этот параметр установлен в 1, меню будет иметь первый элемент, который, если выбрать, позволяет оторвать меню в отдельное окно. По умолчанию этот параметр установлен в 1.Виджет Menu
поддерживает различные методы для работы с меню. Ниже перечислены некоторые из них:
add_command(options)
: Добавляет пункт меню, который может вызывать функцию или метод при выборе.add_cascade(options)
: Добавляет подменю в меню.add_checkbutton(options)
: Добавляет в меню пункт с флажком.add_radiobutton(options)
: Добавляет в меню пункт с радио-кнопкой.add_separator()
: Добавляет горизонтальную линию-разделитель в меню.delete(start, end)
: Удаляет элементы меню в указанном диапазоне.entryconfig(index, options)
: Изменяет опции для указанного элемента меню.В Tkinter с помощью виджета Menu
можно создавать различные типы меню, включая панель меню, и контекстные меню.
Панель меню: Это меню, которое обычно находится в верхней части окна и содержит команды, группированные по категориям. Пример создания панели меню уже был показан выше.
Контекстное меню: Контекстное меню появляется при нажатии правой кнопки мыши на определенном элементе интерфейса. Ниже приведен пример создания выпадающего меню:
import tkinter as tk
def callback():
print("You clicked the menu")
root = tk.Tk()
# create a context menu
context_menu = tk.Menu(root, tearoff=0)
context_menu.add_command(label="Refresh", command=callback)
context_menu.add_command(label="Edit", command=callback)
context_menu.add_separator()
context_menu.add_command(label="Quit", command=root.quit)
def show_context_menu(event):
# try to post the menu at the event x,y coordinates
try:
context_menu.tk_popup(event.x_root, event.y_root)
finally:
# make sure to release the grab (Tk command to capture mouse events)
context_menu.grab_release()
# bind the context menu to the right mouse button
root.bind("<Button-3>", show_context_menu)
root.mainloop()
Важно знать, что некоторые элементы и опции меню могут отображаться и работать по-разному на разных операционных системах из-за различий в нативных стилях и нормах интерфейса.
Помимо этого, в Tkinter есть специальные типы меню: Menubutton
, который позволяет создавать меню, активируемые нажатием на кнопку, и OptionMenu
, который позволяет создавать выпадающие списки.
Можно создавать меню с несколькими уровнями вложенности. Это можно сделать путем добавления меню в качестве подменю другого меню с помощью метода add_cascade()
. Каждое подменю, в свою очередь, может содержать свои собственные элементы и подменю.
import tkinter as tk
root = tk.Tk()
menubar = tk.Menu(root)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="New File", command=None)
filemenu.add_command(label="Open File", command=None)
submenu = tk.Menu(filemenu, tearoff=0)
submenu.add_command(label="Recent File", command=None)
submenu.add_command(label="Recent Project", command=None)
filemenu.add_cascade(label="Open Recent", menu=submenu)
filemenu.add_separator()
filemenu.add_command(label="Exit", command=root.quit)
menubar.add_cascade(label="File", menu=filemenu)
root.config(menu=menubar)
root.mainloop()
В этом примере в меню «File» добавлено подменю «Open Recent», которое содержит свои собственные пункты меню.
Можно привязывать обработчики событий к пунктам меню для выполнения определенных действий при их выборе. Это обычно делается с помощью параметра command
при добавлении пункта меню с помощью метода add_command()
.
def open_file():
print("File opened")
filemenu.add_command(label="Open", command=open_file)
В этом примере при выборе пункта «Open» будет вызываться функция open_file()
, которая выводит сообщение «File opened».
Можно использовать переменные Tkinter (StringVar, IntVar и т.д.) для связывания состояния пунктов меню с переменными. Это особенно полезно для пунктов меню с флажками и радио-кнопками.
var = tk.IntVar()
filemenu.add_checkbutton(label="Check", variable=var)
В этом примере состояние пункта меню с флажком связано с целочисленной переменной. Когда пользователь выбирает или снимает выбор с этого пункта меню, значение переменной изменяется соответственно.
Использование виджета Menu
позволяет делать пользовательский интерфейс более функциональным и удобным для пользователя, предоставляя ему удобный доступ к командам и настройкам.
Содержание: