Como criar o menu suspenso no Tkinter

  1. Exemplo de Tkinter OptionMenu
  2. Comando Bind para OptionMenu Quando o valor muda

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