Как использовать виджет Tkinter Menubutton в Python

Виджет Tkinter Menubutton представляет собой комбинацию виджета Button и виджета Menu в Python.

Знакомство с виджетом Menubutton

При нажатии Menubutton отображается меню с вариантами выбора. Например:

Меню с вариантами выбора

Чтобы создать виджет Menubutton, выполните следующие действия:

  • Сначала создайте виджет MenuButton:
menu_button = ttk.Menubutton(container, **options)
  • Во-вторых, создайте новый экземпляр класса Menu:
menu = tk.Menu(menu_button, tearoff=False)
  • В-третьих, добавьте один или несколько пунктов меню в экземпляр меню. И вы можете добавить виджеты Checkbutton или Radiobutton в меню.

Наконец, назначьте меню экземпляру MenuButton:

menu_button["menu"] = menu

Пример виджета Tkinter Menubutton

Следующая программа иллюстрирует, как использовать виджет Menubutton. При нажатии на MenuButton отображается меню, состоящее из трех вариантов: красный, зеленый и синий.

Цвет фона главного окна будет меняться в зависимости от выбранного пункта Menubutton:

Выбор цвета главного окна

import tkinter as tk
from tkinter import ttk


class App(tk.Tk):
    def __init__(self):
        super().__init__()

        self.geometry('300x250')
        self.title('Menubutton Demo')

        # Menubutton variable
        self.selected_color = tk.StringVar()
        self.selected_color.trace("w", self.menu_item_selected)

        # create the menu button
        self.create_menu_button()

    def menu_item_selected(self, *args):
        """ handle menu selected event """
        self.config(bg=self.selected_color.get())

    def create_menu_button(self):
        """ create a menu button """
        # menu variable
        colors =('Red', 'Green', 'Blue')

        # create the Menubutton
        menu_button = ttk.Menubutton(
            self,
            text='Select a color')

        # create a new menu instance
        menu = tk.Menu(menu_button, tearoff=0)

        for color in colors:
            menu.add_radiobutton(
                label=color,
                value=color,
                variable=self.selected_color)

        # associate menu with the Menubutton
        menu_button["menu"] = menu

        menu_button.pack(expand=True)


if __name__ == "__main__":
    app = App()
    app.mainloop()

Как это работает.

В методе __init__() мы определяем переменную, которая отслеживает выбранное значение меню:

self.selected_color = tk.StringVar()
self.selected_color.trace("w", self.menu_item_selected)

Если значение selected_color изменено, будет выполнен метод menu_item_selected.

Метод create_menu_button() создает MenuButton:

  • Сначала создадим Menubutton:
menu_button = ttk.Menubutton(
    self,
    text='Select a color')
  • Затем создайте новое меню и добавьте в меню три виджета Radiobutton, полученные из кортежа цветов:
# create a new menu instance
menu = tk.Menu(menu_button, tearoff=0)

for color in colors:
    menu.add_radiobutton(
        label=color,
        value=color,
        variable=self.selected_color)

При выборе пункта меню значение переменной self.selected_color меняется на значение выбранного пункта меню.

  • Наконец, свяжите меню с кнопкой Menubutton:
menu_button["menu"] = menu
Похожие посты
Добавить комментарий

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