Как сделать меню в питоне
Перейти к содержимому

Как сделать меню в питоне

  • автор:

Как сделать меню в питоне

Для создания иерархического меню в 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() . В итоге графическое окно будет иметь следующее меню:

Меню в tkinter и Python

Теперь добавим подменю:

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)

Подменю и сепаратор в tkinter в Python

Но обратите внимание на пунктирную линию в подменю, которая совершенно не нужна и непонятно откуда появляется. Чтобы избавиться от этой линии, надо для нужного пункта меню установить параметр 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()

Подменю и сепаратор в виджете Menu в приложении на tkinter в Python

Подобным образом можно создавать и более глубокие иерархии меню:

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

Сложные подменю в виджете Menu в приложении на tkinter в Python

Взаимодействие с меню

Отличительной особенностью элементов меню является способность реагировать на нажатия пользователя. Для этого у каждого элемента меню можно задать параметр 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()

Как сделать меню в питоне

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

tkinter меню python

 tkinter меню python

Всем привет. В данной статье мы рассмотрим создание меню программы в пользовательском интерфейсе на языке программирования python с использованием библиотеки tkinter. Итак, поехали!

Для того чтобы создать меню мы должны воспользоваться специальным виджетом Menu:

from tkinter import * window = Tk() menu = Menu(window) window.config(menu=menu) menu.add_command(label="Создать") window.mainloop()

библиотека tkinter виджет menuadd_command

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

библиотека tkinter виджет меню add_cascade

Здесь мы создали еще одну кнопку ‘Файл’ в нашем меню. Обратите внимание что сделали мы это через метод 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 для вывода названия кнопки.

На этом данная статья подошла к концу. Я желаю вам успехов и удачи! Пока!

Оцените статью:
Статьи
  • Агрегатные функции в SQL
  • map js
  • JavaScript ошибки
  • CSS before after
  • Конструктор функций javaScript
  • accesskey HTML
  • Полоса прокрутки css
  • Vibrate api
  • autocomplete html
Комментарии

Внимание. Комментарий теперь перед публикацией проходит модерацию

Все комментарии отправлены на модерацию

© 2017-2024 webfanat.com Все права защищены.

Реклама

Запись экрана

Данное расширение позволяет записывать экран и выводит видео в формате webm

Добавить приложение на рабочий стол

Чат-боты в Telegram на Python. Часть 2. Создаём и настраиваем меню

Продолжаем писать чат-бота для Telegram — добавляем кнопки и интерактив.

Иллюстрация: Катя Павловская для Skillbox Media

Антон Яценко

Антон Яценко
Изучает Python, его библиотеки и занимается анализом данных. Любит путешествовать в горах.

В первой части урока по чат-ботам для Telegram мы создали на Python эхо-бота с помощью библиотеки aiogram. Сам эхо-бот работает просто, а его функция очевидна из названия: в ответ на сообщение пользователя он присылает тот же текст. Если вы ещё не читали первую часть, начните с неё.

Во второй части урока поработаем над меню: добавим для пользователей клавиатуру с быстрыми ответами и инлайн-кнопки для перехода на сайт Skillbox. Начнём с создания меню, но сначала разберёмся с видами возможных клавиатур.

Виды клавиатур

Библиотека aiogram позволяет создать на Python клавиатуры двух видов, отличающиеся друг от друга расположением кнопок:

  • Reply-кнопки для шаблонных ответов, которые закрепляются вместо основной клавиатуры на экране. Часто используются в чат-ботах как меню. Создаются с помощью метода ReplyKeyboardMarkup.
  • Инлайн-кнопки, связанные с сообщениями в чате. При этом пользователь видит и основную клавиатуру. Создаются с помощью метода InlineKeyboardMarkup.

Создание меню

Наш эхо-бот для Telegram сейчас позволяет только отправлять текстовые сообщения и получать их обратно. Давайте проапгрейдим его и добавим кнопки с готовыми сообщениями, которые не надо вводить самому. Это будут reply-кнопки.

Нам понадобится класс ReplyKeyboardMarkup — для начала импортируем его и дополнительные необходимые классы:

Если нажать на любую кнопку, текст кнопки отправится в чат, а Telegram-бот пришлёт в ответ эту же фразу:

Можно создавать сколько угодно шаблонов, а также связывать кнопку с новыми действиями. Попробуем это на примере инлайн-клавиатур.

Инлайн-кнопки на aiogram

Инлайн-кнопки отличаются от обычных тем, что связаны не с областью клавиатуры в мессенджере, а с каким-то сообщением в Telegram-чате. Самый простой пример инлайн-кнопки — это меню в канале @BotFather, с помощью которого мы создавали токен для доступа к API Telegram. Например, вот так в нём выглядит инлайн-меню с уже созданными ботами:

Создадим на Python для нашего бота инлайн-кнопки со ссылками на Skillbox Media и курсы по программированию. Для этого вернёмся к разделу с импортами в коде и добавим ещё одну строку, чтобы можно было использовать необходимые классы:

Всё получилось. Теперь инлайн-клавиатура появляется при отправке команды /ссылки в бот.

Заключение

В нашем эхо-боте для Telegram появилось два вида меню, написанных на Python: reply-кнопки для быстрых сообщений и инлайн-кнопки для перехода на блог и сайт Skillbox. Для создания сложных ботов — например, ботов онлайн-магазинов — можно самостоятельно изучить документацию к библиотеке aiogram: попробовать новые классы, методы и объекты.

Читайте также:

  • С# для новичков: развеиваем мифы и пишем простого чат-бота
  • Тест. Какой язык создадите вы — Java или Python?
  • Что можно сделать на JavaScript и что нельзя

Виджет 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 . Команду очистки текстового поля поместите в контекстное меню.

Пример программы на Tkinter с меню

Курс с примерами решений практических работ: pdf-версия

X Скрыть Наверх

Tkinter. Программирование GUI на Python

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *