Виджет OptionMenu предоставляет вам предопределенный набор параметров в выпадающем меню.

Введение в виджет Tkinter OptionMenu
Чтобы создать новый Tkinter виджет OptionMenu в Python, используйте конструктор OptionMenu:
OptionMenu(container, variable, default=None, *values, **kwargs)
Конструктор OptionMenu принимает ряд параметров:
- container является родительским виджетом виджета OptionMenu.
- variable — это объект tk.StringVar, который содержит текущий выбранный параметр OptionMenu.
- default — это параметр по умолчанию, который виджет отображает изначально.
- values — это список значений, которые отображаются в раскрывающемся меню.
- kwargs — это конфигурация, специфичная для виджета.
OptionMenu позволяет вам изменить направление раскрывающегося меню с помощью параметра направления. Допустимые направления: «выше», «ниже», «слева», «справа» или «вровень».
Виджет OptionMenu также поддерживает опцию команды. Это позволяет назначить обратный вызов, который будет вызван после выбора элемента.
Как и для других виджетов ttk, вы можете указать имя стиля для OptionMenu с помощью параметра style.
Пример виджета OptionMenu в Tkinter
Следующий пример иллюстрирует, как использовать виджет OptionMenu. Когда вы выбираете элемент, он отобразит ваш выбор в метке:
import tkinter as tk
from tkinter import ttk
class App(tk.Tk):
def __init__(self):
super().__init__()
self.geometry("320x80")
self.title('Tkinter OptionMenu Widget')
# initialize data
self.languages =('Python', 'JavaScript', 'Java',
'Swift', 'GoLang', 'C#', 'C++', 'Scala')
# set up variable
self.option_var = tk.StringVar(self)
# create widget
self.create_wigets()
def create_wigets(self):
# padding for widgets using the grid layout
paddings = {'padx': 5, 'pady': 5}
# label
label = ttk.Label(self, text="Select your most favorite language:")
label.grid(column=0, row=0, sticky=tk.W, **paddings)
# option menu
option_menu = ttk.OptionMenu(
self,
self.option_var,
self.languages[0],
*self.languages,
command=self.option_changed)
option_menu.grid(column=1, row=0, sticky=tk.W, **paddings)
# output label
self.output_label = ttk.Label(self, foreground='red')
self.output_label.grid(column=0, row=1, sticky=tk.W, **paddings)
def option_changed(self, *args):
self.output_label['text'] = f'You selected: {self.option_var.get()}'
if __name__ == "__main__":
app = App()
app.mainloop()
Выход:

Как это работает.
- Сначала определите список строк, используемых для отображения в виджете OptionMenu:
self.languages =('Python', 'JavaScript', 'Java', 'Swift', 'GoLang', 'C#', 'C++', 'Scala')
- Во-вторых, определите объект ttk.StringVar(), который содержит текущий выбранный элемент OptionMenu в методе __init__():
self.option_var = tk.StringVar(self)
- В-третьих, создайте новый экземпляр виджета OptionMenu:
option_menu = ttk.OptionMenu(
self,
self.option_var,
self.languages[0],
*self.languages,
command=self.option_changed)
Обратите внимание: если вы пропустите значение по умолчанию self.languages[0], первый пункт OptionMenu исчезнет.
Метод option_changed() будет выполнен после выбора элемента. Метод устанавливает текст для output_label для выбранного элемента:
self.output_label['text'] = f'You selected: {self.option_var.get()}'
