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.