Виджет Tkinter OptionMenu в Python на практических примерах
Виджет 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()}'