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()