Виджет Tkinter OptionMenu в Python на практических примерах

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

Виджет Tkinter 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 Tkinter

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

  • Сначала определите список строк, используемых для отображения в виджете 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()}'
Похожие посты
Добавить комментарий

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