Объект Меню

Что такое меню

Меню — это объект, который присутствует во многих пользовательских приложениях. Находится оно под строкой заголовка и представляет собой выпадающие списки под словами; каждый такой список может содержать другой вложенный в него список. Каждый пункт списка представляет собой команду, запускающую какое-либо действие или открывающую диалоговое окно.
Создание меню в Tkinter

from tkinter import *

root = Tk()

 

m = Menu(root) #создается объект Меню на главном окне

root.config(menu=m) #окно конфигурируется с указанием меню для него

 

fm = Menu(m) #создается пункт меню с размещением на основном меню (m)

m.add_cascade(label="File",menu=fm) #пункту располагается на основном меню (m)

fm.add_command(label="Open...") #формируется список команд пункта меню

fm.add_command(label="New")

fm.add_command(label="Save...")

fm.add_command(label="Exit")

 

hm = Menu(m) #второй пункт меню

m.add_cascade(label="Help",menu=hm)

hm.add_command(label="Help")

hm.add_command(label="About")

 

root.mainloop()

Метод add_cascade добавляет новый пункт в меню, который указывается как значение опции menu.

Метод add_command добавляет новую команду в пункт меню. Одна из опций данного метода (в примере выше ее пока нет) — command – связывает данную команду с функцией- обработчиком.

Можно создать вложенное меню. Для этого создается еще одно меню и с помощью add_cascade привязать к родительскому пункту.

nfm = Menu(fm)

fm.add_cascade(label="Import",menu=nfm)

nfm.add_command(label="Image")

nfm.add_command(label="Text")

Привязка функций к меню

Каждая команда меню обычно должна быть связана со своей функцией, выполняющей те или иные действия (выражения). Связь происходит с помощью опции command метода add_command. Функция обработчик до этого должна быть определена.

Для примера выше далее приводятся исправленные строки добавления команд “About”, “New” и “Exit”, а также функции, вызываемые, когда пользователь щелкает левой кнопкой мыши по соответствующим пунктам подменю.

def new_win():

     win = Toplevel(root)

 

def close_win():

     root.destroy()

 

def about():

     win = Toplevel(root)

     lab = Label(win,text="Это просто программа-тест \n меню в Tkinter")

     lab.pack()

 

….

fm.add_command(label="New",command=new_win)

….

fm.add_command(label="Exit",command=close_win)

 

….

hm.add_command(label="About",command=about)

Практическая работа

Напишите приложение с меню, содержащим два пункта: Color и Size. Пункт Color должен содержать три команды (Red, Green и Blue), меняющие цвет рамки на главном окне. Пункт Size должен содержать две команды (500x500 и 700х400), изменяющие размер рамки.

Примерный ответ к практической работе

from tkinter import *

root = Tk()

 

def colorR():

     fra.config(bg="Red")

def colorG():

     fra.config(bg="Green")

def colorB():

     fra.config(bg="Blue")

 

def square():

     fra.config(width=500)

     fra.config(height=500)

def rectangle():

     fra.config(width=700)

     fra.config(height=400)

 

fra = Frame(root,width=300,height=100,bg="Black")

fra.pack()

 

m = Menu(root)

root.config(menu=m)

 

cm = Menu(m)

m.add_cascade(label="Color",menu=cm)

cm.add_command(label="Red",command=colorR)

cm.add_command(label="Green",command=colorG)

cm.add_command(label="Blue",command=colorB)

 

sm = Menu(m)

m.add_cascade(label="Size",menu=sm)

sm.add_command(label="500x500",command=square)

sm.add_command(label="700x400",command=rectangle)

 

root.mainloop()