Tkinter でプルダウンメニューを作成します

  1. Tkinter OptionMenu
  2. 値を変更したときのコマンドを OptionMenu にバインドします

Tkinter でプルダウンメニューを作るにはいくつかの方法があります。

  1. Tkinter コンボボックス教程で紹介されたコンボボックス Combobox を使用する
  2. 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 は作成したオプションメニューの親レベルです。

variabletk.StrigVar タイプの初期テキスト変数です。

*OptionList はメニューの他のオプションです。* はデータ容器用の unpack です。ここでは list を指します。

Tkinter OptionMenu Example

値を変更したときのコマンドを OptionMenu にバインドします

OptionMenu がオプションリストから新しい値を選択した場合、対応するコマンドを接続できません。ボタンウィジェットのようにコールバック関数を簡単にバインドすることはできません。

tk.Button(app, text="Increase", width=30, command=change_label_number)

あなたは trace を使って observerOption 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()

traceobserver は 3つのモードがあります。

observer モード 説明
w variable が変更または選択された場合
r variable が読み込まれた場合
u variable が削除された場合

variable.trace("w", callback) は、variable がユーザによって変更または選択されたときに calback 関数を呼び出すことを意味します。

Tkinter OptionMenu Callback

comments powered by Disqus