Menu

Для створення ієрархічного меню в tkinter і Python застосовується віджет Menu .

Меню може містити багато елементів, причому ці елементи самі можуть представляти меню і містити інші елементи. Залежно від того, який тип елементів ми хочемо додати в меню, буде відрізнятися метод, який використовується для їх додавання. Зокрема, нам доступні наступні методи:

  • add_command (options) : додає елемент меню через параметр options

  • add_cascade (options) : додає елемент меню, який в свою чергу може представляти підміню

  • add_separator () : додає лінію-розмежувач

  • add_radiobutton (options) : додає в меню перемикач

  • add_checkbutton (options) : додає в меню прапорець

Створимо найпростіше меню:

from tkinter import *

root = Tk()

root.title("GUI на Python")

root.geometry("300x250")

main_menu = Menu()

main_menu.add_cascade(label="File")

main_menu.add_cascade(label="Edit")

main_menu.add_cascade(label="View")

root.config(menu=main_menu)

root.mainloop()


Для додавання пунктів меню у об'єкта Menu викликається метод add_cascade () . У цей метод передаються параметри пункту меню, в даному випадку вони представлені текстової міткою, яка встановлюється через параметр label.

Але просто створити меню - ще недостатньо. Його треба встановити для поточного вікна за допомогою параметра menu в методі config () . В результаті графічне вікно матиме наступне меню:

from tkinter import *

root = Tk()

root.title("GUI на Python")

root.geometry("300x250")

main_menu = Menu()

file_menu = Menu()

file_menu.add_command(label="New")

file_menu.add_command(label="Save")

file_menu.add_command(label="Open")

file_menu.add_separator()

file_menu.add_command(label="Exit")

main_menu.add_cascade(label="File", menu=file_menu)

main_menu.add_cascade(label="Edit")

main_menu.add_cascade(label="View")

root.config(menu=main_menu)

root.mainloop()


Якщо необхідно налаштувати меню, то ми можемо поставити в конструкторі Menu наступні опції:

  • activebackground : колір активного пункту меню

  • activeborderwidth : товщина кордону активного пункту меню

  • activeforeground : колір тексту активного пункту меню

  • bg : фоновий колір

  • bd : товщина кордону

  • cursor : курсор покажчика миші при наведенні на меню

  • disabledforeground : колір, коли меню знаходиться в стані DISABLED

  • font : шрифт тексту

  • fg : колір тексту

  • tearoff : меню може бути від'єднано від графічного вікна. Зокрема, при створенні підміню а скріншоті можна побачити переривається лінію в верху підміню, за яку його можна від'єднати. Однак при значенні tearoff=0підміню не зможе бути від'єднано.

from tkinter import *

root = Tk()

root.title("GUI на Python")

root.geometry("300x250")

main_menu = Menu()

file_menu = Menu(font=("Verdana", 13, "bold"), tearoff=0)

file_menu.add_command(label="New")

file_menu.add_command(label="Save")

file_menu.add_command(label="Open")

file_menu.add_separator()

file_menu.add_command(label="Exit")

main_menu.add_cascade(label="File", menu=file_menu)

main_menu.add_cascade(label="Edit")

main_menu.add_cascade(label="View")

root.config(menu=main_menu)

root.mainloop()


Взаємодія з меню

Відмінною особливістю елементів меню є здатність реагувати на натискання користувача. Для цього у кожного елемента меню можна задати параметр command , який встановлює посилання на функцію, виконувану при натисканні.

from tkinter import *

from tkinter import messagebox

def edit_click():

messagebox.showinfo("GUI Python", "Нажата опция Edit")

root = Tk()

root.title("GUI на Python")

root.geometry("300x250")

main_menu = Menu()

main_menu.add_cascade(label="File")

main_menu.add_cascade(label="Edit", command=edit_click)

main_menu.add_cascade(label="View")

root.config(menu=main_menu)

root.mainloop()