O widget OptionMenu
do Tkinter fornece uma maneira simples, porém eficaz, de criar menus suspensos em seus aplicativos GUI Python. Este guia abrange a criação de menus suspensos básicos e sua melhoria com funcionalidades acionadas por mudanças na seleção do usuário.
Sumário
Criando um Menu Suspenso Básico
A base de um menu suspenso Tkinter é o widget ttk.OptionMenu
. Este exemplo demonstra sua implementação básica:
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("Menu Suspenso Tkinter Básico")
selected_option = tk.StringVar(root)
selected_option.set("Opção 1") # Valor padrão
options = ["Opção 1", "Opção 2", "Opção 3"]
option_menu = ttk.OptionMenu(root, selected_option, *options)
option_menu.pack(pady=20)
root.mainloop()
Este código cria uma janela, inicializa uma StringVar
para armazenar a opção selecionada, define uma lista de opções e usa ttk.OptionMenu
para criar o menu suspenso. *options
desempacota a lista, fornecendo cada opção como um argumento separado para OptionMenu
. O valor selecionado é atualizado automaticamente em selected_option
.
Respondendo a Mudanças de Seleção
Para adicionar interatividade, podemos executar código sempre que o usuário seleciona uma opção diferente. Isso é feito usando o método trace
da StringVar
:
import tkinter as tk
from tkinter import ttk
def option_changed(new_value):
print(f"Opção selecionada: {new_value}")
# Adicione suas ações personalizadas aqui, por exemplo, atualize outros widgets,
# faça solicitações de rede, etc.
root = tk.Tk()
root.title("Menu Suspenso Tkinter Interativo")
selected_option = tk.StringVar(root)
selected_option.set("Opção 1")
options = ["Opção 1", "Opção 2", "Opção 3"]
option_menu = ttk.OptionMenu(root, selected_option, *options)
option_menu.pack(pady=20)
selected_option.trace("w", lambda *args: option_changed(selected_option.get()))
root.mainloop()
A função option_changed
é chamada sempre que a variável selected_option
muda. O método trace("w", ...)
registra esta função para ser chamada quando a variável é escrita. A função lambda garante que o valor atual seja passado para option_changed
. Substitua a instrução print
pela lógica do seu aplicativo.
Esta abordagem cria um menu suspenso dinâmico e responsivo, melhorando a interação do usuário e a funcionalidade do aplicativo.