Como criar o menu suspenso no Tkinter
Tem alguns métodos para criar um menu dropdown no Tkinter.
- Use Combobox como introduzido no Tkinter tutorial Combobox capítulo Combobox.
- 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.

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.

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