Как создать выпадающее меню в Tkinter

В Tkinter есть несколько способов создания выпадающего меню.
- Используйте Combobox, как описано в главе Tkinter tutorial Combobox.
- Используйте OptionMenu Widget.
OptionMenu немного похоже на виджет Combobox, но уже включён в сам Tkinter, поэтому нет необходимости импортировать ttk, как в случае с Combobox
.
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
является родителем созданного меню опций,
variable
- это исходная текстовая переменная, имеющая тип tk.StringVar
.
*OptionList
- это другие опции меню. *
используется для распаковки контейнера, так как здесь используется тип list
.
Привязать команду к OptionMenu When Value Changes
OptionMenu
не смог связать команду при выборе нового значения из списка опций. Нельзя было просто связать с ней функцию обратного вызова, как виджет кнопки.
tk.Button(app, text="Increase", width=30, command=change_label_number)
Вам нужно использовать метод трассировки, чтобы прикрепить обратные вызовы Обсервера
к переменной OptionMenu
. Каждый раз, когда переменная изменяется, она запускает функции обратного вызова.
Пример обратного вызова 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()
След наблюдателя
имеет три режима,
режим наблюдателя | Пояснение |
---|---|
w |
когда variable написана кем-то |
r |
когда variable кем-то читается |
u |
когда variable удалена |
Тогда variable.trace("w", callback)
означает, что она вызовет функцию callback
, когда variable
будет записана или выбрана пользователем.
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