Tkinter でプルダウンメニューを作成する
胡金庫
2023年1月30日
Tkinter でプルダウンメニューを作るにはいくつかの方法があります。
- Tkinter コンボボックス教程で紹介されたコンボボックス
Combobox
を使用する OptionMenu
ウィジェットを使用します。
OptionMenu
とコンボボックスのウィジェットは似ていますが、それは Tkinter 自身のモジュールですので、Combobox
を呼び出すのと同じように ttk
を呼び出す必要はありません。
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.StrigVar
タイプの初期テキスト変数です。
*OptionList
はメニューの他のオプションです。*
はデータ容器用の unpack
です。ここでは list
を指します。
値を変更したときのコマンドを OptionMenu
にバインドする
OptionMenu
がオプションリストから新しい値を選択した場合、対応するコマンドを接続できません。ボタンウィジェットのようにコールバック関数を簡単にバインドすることはできません。
tk.Button(app, text="Increase", width=30, command=change_label_number)
あなたは trace
を使って observer
を Option Menu
変数にフィードバックする必要があります。変数が変更されるたびに、コールバック関数が起動されます。
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()
trace
の observer
は 3つのモードがあります。
observer モード | 説明 |
---|---|
w |
variable が変更または選択された場合 |
r |
variable が読み込まれた場合 |
u |
variable が削除された場合 |
variable.trace("w", callback)
は、variable
がユーザによって変更または選択されたときに calback
関数を呼び出すことを意味します。