Como criar o menu suspenso no Tkinter

Jinku Hu 25 junho 2020
  1. Exemplo de Tkinter OptionMenu
  2. Comando Bind para OptionMenu Quando o valor muda
Como criar o menu suspenso no Tkinter

Tem alguns métodos para criar um menu dropdown no Tkinter.

  1. Use Combobox como introduzido no Tkinter tutorial Combobox capítulo Combobox.
  2. Use OptionMenu Widget.

O OptionMenu é um pouco semelhante ao widget Combobox mas já está incluído no próprio Tkinter, portanto, não precisa de importar ttk como no caso do Combobox.

Exemplo de Tkinter OptionMenu

import tkinter as tk

OptionList = ["Aries", "Taurus", "Gemini", "Cancer"]

app = tk.Tk()

app.geometry("100x200")

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=("Helvetica", 12))
opt.pack()

app.mainloop()
opt = tk.OptionMenu(app, variable, *OptionList)

app é o pai do menu de opções criado,

A variável de texto inicial que tem o tipo tk.StringVar é a variável de texto inicial.

A *OptionList é as outras opções de menu. * é utilizada para desempacotar o container, como list digite aqui.

Tkinter OptionMenu Exemplo

Comando Bind para OptionMenu Quando o valor muda

OptMenu não conseguiu ligar um comando quando um novo valor é selecionado a partir da lista de opções. Você não poderia simplesmente ligar uma função de retorno a ele como button widget

tk.Button(app, text="Increase", width=30, command=change_label_number)

Você precisa utilizar um método de rastreamento para anexar as chamadas de retorno do observer à variável OptionMenu. Toda vez que a variável muda, ela aciona as funções de callback.

Exemplo de callback de OptionMenu

import tkinter as tk

OptionList = ["Aries", "Taurus", "Gemini", "Cancer"]

app = tk.Tk()

app.geometry("100x200")

variable = tk.StringVar(app)
variable.set(OptionList[0])

opt = tk.OptionMenu(app, variable, *OptionList)
opt.config(width=90, font=("Helvetica", 12))
opt.pack(side="top")


labelTest = tk.Label(text="", font=("Helvetica", 12), fg="red")
labelTest.pack(side="top")


def callback(*args):
    labelTest.configure(text="The selected item is {}".format(variable.get()))


variable.trace("w", callback)

app.mainloop()

O traço observer tem três modos,

modo de observador Explicação
w quando a variable é escrita por alguém
r quando a variable é lida por alguém
u quando variable é apagada

Então variable.trace("w", callback) significa que ele irá chamar a função callback quando variable for escrito ou selecionado pelo usuário.

Tkinter OptionMenu Chamada de Retorno

Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook