Как сделать меню в питоне
Для создания иерархического меню в tkinter применяется виджет Menu . Основные параметры Menu:
- activebackground : цвет активного пункта меню
- activeborderwidth : толщина границы активного пункта меню
- activeforeground : цвет текста активного пункта меню
- background / bg : фоновый цвет
- bd : толщина границы
- cursor : курсор указателя мыши при наведении на меню
- disabledforeground : цвет, когда меню находится в состоянии DISABLED
- font : шрифт текста
- foreground / fg : цвет текста
- tearoff : меню может быть отсоединено от графического окна. В частности, при создании подменю а скриншоте можно увидеть прерывающуюся линию в верху подменю, за которую его можно отсоединить. Однако при значении tearoff=0 подменю не сможет быть отсоединено.
Меню может содержать много элементов, причем эти элементы сами могут представлять меню и содержать другие элементы. В зависимости от того, какой тип элементов мы хотим добавить в меню, будет отличаться метод, используемый для их добавления. В частности, нам доступны следующие методы:
- add_command(options) : добавляет элемент меню через параметр options
- add_cascade(options) : добавляет элемент меню, который в свою очередь может представлять подменю
- add_separator() : добавляет линию-разграничитель
- add_radiobutton(options) : добавляет в меню переключатель
- add_checkbutton(options) : добавляет в меню флажок
Создадим простейшее меню:
from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("250x150") 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("METANIT.COM") root.geometry("250x150") 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()
Здесь определяется подменю file_menu, которое добавляется в первый пункт основного меню благодаря установке опции menu=file_menu :
main_menu.add_cascade(label="File", menu=file_menu)

Но обратите внимание на пунктирную линию в подменю, которая совершенно не нужна и непонятно откуда появляется. Чтобы избавиться от этой линии, надо для нужного пункта меню установить параметр tearoff=0 :
file_menu = Menu(tearoff=0)
Однако так как подпунктов меню может быть много, чтобы для кажлого не прописывать этот параметр, то проще отключить все это глобально с помощью следующей строки кода
root.option_add("*tearOff", FALSE)
from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("250x150") root.option_add("*tearOff", FALSE) 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()

Подобным образом можно создавать и более глубокие иерархии меню:
from tkinter import * root = Tk() root.title("METANIT.COM") root.geometry("250x150") root.option_add("*tearOff", FALSE) main_menu = Menu() file_menu = Menu() settings_menu = Menu() settings_menu.add_command(label="Save") settings_menu.add_command(label="Open") file_menu.add_cascade(label="Settings", menu=settings_menu) file_menu.add_separator() file_menu.add_command(label="Exit") main_menu.add_cascade(label="File", menu=file_menu) root.config(menu=main_menu) root.mainloop()

Взаимодействие с меню
Отличительной особенностью элементов меню является способность реагировать на нажатия пользователя. Для этого у каждого элемента меню можно задать параметр command , который устанавливает ссылку на функцию, выполняемую при нажатии.
from tkinter import * from tkinter import messagebox root = Tk() root.title("METANIT.COM") root.geometry("250x150") root.option_add("*tearOff", FALSE) def edit_click(): messagebox.showinfo("GUI Python", "Нажата опция Edit") 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()
Виджет Menu в tkinter
Меню – это виджет, который присутствует во многих пользовательских приложениях. Находится оно под строкой заголовка и представляет собой выпадающие списки под словами-пунктами меню. Пункты конечных списков представляют собой команды, обычно выполняющие какие-либо действия или открывающие диалоговые окна.
В tkinter экземпляр меню создается от класса Menu , далее его надо привязать к виджету, на котором оно будет расположено. Обычно таковым выступает главное окно приложения. Его опции menu присваивается экземпляр Menu через имя связанной с экземпляром переменной.
from tkinter import * root = Tk() mainmenu = Menu(root) root.config(menu=mainmenu) root.mainloop()
Если выполнить данный код, то никакого меню вы не увидите. Только тонкую полоску под заголовком окна, ведь ни одного пункта меню не было создано. Метод add_command добавляет пункт меню:
… mainmenu.add_command(label='Файл') mainmenu.add_command(label='Справка') …

В данном случае «Файл» и «Справка» – это команды. К ним можно добавить опцию command , связав тем самым с какой-либо функцией-обработчиком клика. Хотя такой вариант меню имеет право на существование, в большинстве приложений панель меню содержит выпадающие списки команд, а сами пункты на панели командами по сути не являются. Клик по ним приводит лишь к раскрытию соответствующего списка.
В Tkinter проблема решается созданием новых экземпляров Menu и подвязыванием их к главному меню с помощью метода add_cascade .
from tkinter import * root = Tk() mainmenu = Menu(root) root.config(menu=mainmenu) filemenu = Menu(mainmenu, tearoff=0) filemenu.add_command(label="Открыть. ") filemenu.add_command(label="Новый") filemenu.add_command(label="Сохранить. ") filemenu.add_command(label="Выход") helpmenu = Menu(mainmenu, tearoff=0) helpmenu.add_command(label="Помощь") helpmenu.add_command(label="О программе") mainmenu.add_cascade(label="Файл", menu=filemenu) mainmenu.add_cascade(label="Справка", menu=helpmenu) root.mainloop()

На основное меню mainmenu , добавляются не команды, а другие меню. У filemenu и helpmenu в качестве родительского виджета указывается не root , а mainmenu . Команды добавляются только к дочерним меню. Значение 0 опции tearoff отключает возможность открепления подменю, иначе его можно было бы делать плавающим кликом мыши по специальной линии. В случае tearoff=0 она отсутствует.
Точно также можно подвязывать дочерние меню к filemenu и helpmenu , создавая многоуровневые списки пунктов меню.
… helpmenu = Menu(mainmenu, tearoff=0) helpmenu2 = Menu(helpmenu, tearoff=0) helpmenu2.add_command(label="Локальная справка") helpmenu2.add_command(label="На сайте") helpmenu.add_cascade(label="Помощь",menu=helpmenu2) helpmenu.add_command(label="О программе") …

Метод add_separator добавляет линию разделитель в меню. Используется для визуального разделения групп команд.

В tkinter можно создать всплывающее меню, оно же контекстное (если настроить его появление по клику правой кнопкой мыши). Для этого экземпляр меню подвязывается не через опцию menu к родительскому виджету, а к меню применяется метод post , аргументами которого являются координаты того места, где должно появляться меню.
from tkinter import * def circle(): c.create_oval(x, y, x + 30, y + 30) def square(): c.create_rectangle(x, y, x + 30, y + 30) def triangle(): c.create_polygon(x, y, x - 15, y + 30, x + 15, y + 30, fill='white', outline='black') def popup(event): global x, y x = event.x y = event.y menu.post(event.x_root, event.y_root) x = 0 y = 0 root = Tk() c = Canvas(width=300, height=300, bg='white') c.pack() c.bind("", popup) menu = Menu(tearoff=0) menu.add_command(label="Круг", command=circle) menu.add_command(label="Квадрат", command=square) menu.add_command(label="Треугольник", command=triangle) root.mainloop()

Здесь при клике на холсте правой кнопкой мыши в этой точке всплывает меню. При выборе пункта меню рисуется соответствующая фигура в этом же месте.
Практическая работа
Измените программу из практической работы предыдущего урока так, чтобы открытие и сохранение файлов выполнялось не через экземпляры Button , а через Menu . Команду очистки текстового поля поместите в контекстное меню.

Курс с примерами решений практических работ: pdf-версия
X Скрыть Наверх
Tkinter. Программирование GUI на Python
Как сделать меню в питоне
Блог веб разработки статьи | видеообзоры | исходный код

tkinter меню python

Всем привет. В данной статье мы рассмотрим создание меню программы в пользовательском интерфейсе на языке программирования python с использованием библиотеки tkinter. Итак, поехали!
Для того чтобы создать меню мы должны воспользоваться специальным виджетом Menu:
from tkinter import * window = Tk() menu = Menu(window) window.config(menu=menu) menu.add_command(label="Создать") window.mainloop()

C помощью данного кода мы создадим окно программы в самом верху которого будет меню с одной единственной кнопкой создать.
menu = Menu(window) — данной строчкой мы создает элемент меню в качестве элемента window выступает главное окно.
window.config(menu=menu) — здесь добавляем элемент меню в главное окно.
menu.add_command(label=»Создать») — через метод add_command() добавляем в меню кнопку с названием ‘Создать’.
Мы можем добавлять в меню сколько угодно кнопок через методы add_command() или метод add_cascade(). С помощью метода add_cascade() мы можем создавать развертывающиеся меню. Пример:
from tkinter import * window = Tk() menu = Menu(window) submenu = Menu(window) window.config(menu=menu) submenu.add_command(label="Сохранить как") submenu.add_command(label="Сохранить") menu.add_cascade(label="Файл" ,menu=submenu) menu.add_command(label="Создать") window.mainloop()

Здесь мы создали еще одну кнопку ‘Файл’ в нашем меню. Обратите внимание что сделали мы это через метод add_cascade() в котором указали название кнопки и ссылку на элемент submenu. Элемент submenu мы создали и добавили в него две кнопки ‘Сохранить’ и ‘Сохранить как’.
В результате у нас получилось меню с кнопками ‘Файл’ и ‘Создать’, если мы кликнем по кнопке ‘Файл’ у нас развернется список где будут еще две кнопки ‘Сохранить’ и ‘Сохранить как’.
Вот так с помощью библиотеки tkinter мы можем реализовать меню программы. Следовательно зачем нам нужны кнопки которые ничего не делают?!
Напоследок давайте разберем как вешать на кнопки события. Для того чтобы повесить событие на кнопку необходимо в метод add_cascade() добавить параметр command который должен равняться функции которая будет вызвана при нажатии кнопки. Пример:
from tkinter import * window = Tk() label = Label(window) def save_as(): label['text']='Сохранить как' def save(): label['text']='Сохранить' def new(): label['text']='Создать' menu = Menu(window) submenu = Menu(window) window.config(menu=menu) submenu.add_command(label="Сохранить как",command=save_as) submenu.add_command(label="Сохранить",command=save) menu.add_cascade(label="Файл",menu=submenu) menu.add_command(label="Создать",command=new) label.pack() window.mainloop()
Здесь мы на каждую добавленную кнопку с помощью метода add_command() повесили событие(команду) которая вызывает определенную функцию. В результате у нас при нажатии на кнопку выводится ее название.
Заметьте что здесь мы добавили метод label для вывода названия кнопки.
На этом данная статья подошла к концу. Я желаю вам успехов и удачи! Пока!
Оцените статью:
Статьи
- Object.is js
- parse_url() и parse_str() php
- Модальные окна HTML
- Скриншоты python
- wget python
- Touch javascript
- code html
- константы php 7
- python pyperclip
Комментарии
Внимание. Комментарий теперь перед публикацией проходит модерацию
Все комментарии отправлены на модерацию
© 2017-2024 webfanat.com Все права защищены.

Запись экрана
Данное расширение позволяет записывать экран и выводит видео в формате webm
Добавить приложение на рабочий стол
Как создать меню с выбором функций на Python?
Мне нужно, чтобы после выбор каждой функции, у меня заново открывалось меню, и только при выборе нуля в меню, он выходил из неё. Пример:
print("1. выбор действия один") print("2. выбор действия два") print("3. выбор действия три") print("0. выйти из программы") default = input("Выберите пункт: ")
Отслеживать
задан 29 ноя 2020 в 18:39
1 1 1 серебряный знак 3 3 бронзовых знака
Ну, зациклите код из вопроса, а из input принимайте значение в переменную, в которой и проверяйте введенное значение
29 ноя 2020 в 18:43
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
while True: print("1. выбор действия один") print("2. выбор действия два") print("3. выбор действия три") print("0. выйти из программы") cmd = input("Выберите пункт: ") if cmd == "1": # действие 1 elif cmd == "2": # действие 2 elif cmd == "3": # действие 3 elif cmd == "0": break else: print("Вы ввели не правильное значение"
Отслеживать
ответ дан 29 ноя 2020 в 18:45
19.7k 6 6 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков
- python
- menu
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.26.3951