Menu de opções Tkinter

Resumo : neste tutorial, você aprenderá sobre o OptionMenuwidget Tkinter para exibir um conjunto de opções em um menu suspenso.

Introdução ao OptionMenuwidget Tkinter

O OptionMenuwidget fornece um conjunto predefinido de opções em um menu suspenso.

Menu de opções Tkinter

Para criar um novo OptionMenuwidget, você usa o OptionMenuconstrutor:

OptionMenu(container, variable, default=None, *values, **kwargs)Linguagem de código:  Python  ( python )

O OptionMenuconstrutor aceita vários parâmetros:

  • containeré o widget pai do OptionMenuwidget.
  • variableé um tk.StringVarobjeto que contém a opção atualmente selecionada do OptionMenu.
  • defaulté a opção padrão que o widget exibe inicialmente.
  • valuesé uma lista de valores que aparecem no menu suspenso.
  • kwargsé a configuração específica do widget.

O OptionMenupermite alterar a direção do menu suspenso por meio da directionopção. As direções válidas são 'above', 'below', 'left', 'right', ou 'flush'.

O OptionMenuwidget também suporta a commandopção. Isso permite atribuir um retorno de chamada que será chamado após a seleção de um item.

Como outros widgets ttk , você pode especificar o nome do estilo para OptionMenuusar a styleopção.

OptionMenuExemplo de widget Tkinter

O exemplo a seguir ilustra como usar um OptionMenuwidget. Quando você seleciona um item, sua seleção será exibida em um rótulo:

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()Linguagem de código:  Python  ( python )

Saída:

Demonstração do menu de opções Tkinter

Como funciona.

Primeiro, defina uma lista de strings usadas para exibição no OptionMenuwidget:

self.languages = ('Python', 'JavaScript', 'Java', 'Swift', 'GoLang', 'C#', 'C++', 'Scala')Linguagem de código:  Python  ( python )

Segundo, defina um ttk.StringVar()objeto que contenha o item atualmente selecionado no OptionMenumétodo __init__():

self.option_var = tk.StringVar(self)Linguagem de código:  Python  ( python )

Terceiro, crie uma nova instância do OptionMenuwidget:

option_menu = ttk.OptionMenu(
    self,
    self.option_var,
    self.languages[0],
    *self.languages,
    command=self.option_changed)Linguagem de código:  Python  ( python )

Observe que se você pular o valor padrão self.languages[0], o primeiro item OptionMenudesaparecerá.

O option_changed()método será executado após um item ser selecionado. O método define o texto do output_labelitem selecionado:

self.output_label['text'] = f'You selected: {self.option_var.get()}'Linguagem de código:  PHP  ( php )

Resumo

  • Use o widget Tkinter OptionMenupara fornecer aos usuários um conjunto fixo de opções em um menu suspenso.
  • Sempre especifique o valor padrão para o OptionMenuconstrutor.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *