Шаг 67.
Библиотека Tkinter. Компоненты и вспомогательные классы. Нестилизуемые компоненты. Компонент Menu: меню. Создание контекстного меню

    На этом шаге мы рассмотрим пример создания такого меню.

    Контекстное меню, вызываемое по щелчку правой кнопкой мыши на компоненте, создать также несложно.

  1. Создается экземпляр класса Menu, представляющий контекстное меню, и в это меню добавляются необходимые подменю и пункты.
  2. К событию щелчка правой кнопкой мыши на компоненте, в котором должно появляться контекстное меню, привязывается обработчик.
  3. В обработчике события выполняется вывод контекстного меню вызовом метода post(). В качестве параметров можно использовать значения, извлеченные из атрибутов x_root и y_root объекта события.

    Вот пример кода, создающего панель, в которой по щелчку правой кнопкой мыши должно выводиться контекстное меню:

import tkinter
import tkinter.ttk

class Application(tkinter.ttk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        # Обязательно указываем ширину и высоту контейнера посредством
        # опций width и height соответственно
        self.configure(width=200, height=100)
        self.pack(padx=4, pady=4)
        self.create_widgets()
        self.master.title("Пример создания меню")
        # Запрещаем изменять размеры окна
        self.master.resizable(False, False)

    def create_widgets(self):
        frm = tkinter.ttk.Frame(self, width=200, height=100)
        frm.bind("<Button-3>", self.show_menu)
        frm.grid()

        self.menu = tkinter.Menu(self, tearoff=False)
        self.menu.add_command(label="Вырезать")
        self.menu.add_command(label="Скопировать")
        self.menu.add_command (label="Вставить")

    def show_menu(self, evt):
        self.menu.post(evt.x_root, evt.y_root)
          

root = tkinter.Tk()
app = Application(master=root)
root.mainloop()
Архив с файлом можно взять здесь.

    Результат работы приложения приведен на рисунке 1.


Рис.1. Результат работы приложения

    На следующем шаге мы рассмотрим компонент Menubutton.




Предыдущий шаг Содержание Следующий шаг