HOWTO · Tkinter

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

この記事では、どのように Tkinter でプルダウンメニューを作成するかを紹介します。

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