Как использовать виджет 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