Tkinter チュートリアル - コンボボックス Combobox

  1. Python Tkinter コンボボックスの例
  2. Tkinter Combobox イベントバインディング
  3. Tkinter Combobox の動的な値の更新

Tkinter Combobox は、ユーザーが選択できるドロップダウンリストです。これは、Entry ウィジェットと drop-down ウィジェットの組み合わせです。左側の矢印をクリックすると、すべてのオプションを示すドロップダウンメニューが表示され、クリックすると現在の Entry 内容が置き換えられます。

Python Tkinter コンボボックスの例

Tkinter Combobox_Basic.py
import tkinter as tk
from tkinter import ttk
 
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])
pprint(dict(comboExample)) 
comboExample.grid(column=0, row=1)
comboExample.current(1)

print(comboExample.current(), comboExample.get())

app.mainloop()

Tkinter チュートリアル Combobox 基本

from tkinter import ttk

Tkinter コンボボックスウィジェットは Tkinter の ttk モジュールに含まれているため、このウィジェットを使用するにはこのモジュールをインポートする必要があります。

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])

Tkinter コンボボックスウィジェットインスタンスを作成し、ドロップダウンリストに表示される値も割り当てます。

comboExample.current(1)

通常、コンボボックスに表示されるデフォルトのアイテムは、値リストの最初の要素です。current(index) メソッドを使用して任意の要素に変更することもできます。

print(comboExample.current(), comboExample.get())

また current()、現在選択されている要素のインデックス get() を取得し、メソッドを使用して要素自体を取得することもできます。

Tkinter Combobox イベントバインディング

コンボボックスのコールバック関数のバインディングは、前の章で紹介したウィジェットとは異なります。bind()method は、ユーザーがドロップダウンリストで要素を選択したときにコールバック関数を combobox 仮想イベントにバインドする方法です。

Tkinter Combobox_Virtual Event Binding.py

import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"])

comboExample.grid(column=0, row=1)
comboExample.current(1)

comboExample.bind("<<ComboboxSelected>>", callbackFunc)

app.mainloop()
def callbackFunc(event):
     print("New Element Selected")

これは、リストから要素を選択するたびに定義されるコールバック関数です。

注意

event 引き渡し引数としてスキップされない、コンボボックス仮想イベントから渡される

comboExample.bind("<<ComboboxSelected>>", callbackFunc)

仮想イベント <> をコールバック関数にバインドします。

リストから新しい要素を選択するたびに、印刷され New Element Selected ます。

Tkinter Combobox の動的な値の更新

Tkinter コンボボックスの選択肢のリストは、選択肢 postcommand のポップダウンリストを表示する前に特定の機能を実行するオプションで動的に更新できます。

import tkinter as tk
from tkinter import ttk

def callbackFunc(event):
     print("New Element Selected")
     
app = tk.Tk() 
app.geometry('200x100')

def changeMonth():
    comboExample["values"] = ["July",
                              "August",
                              "September",
                              "October"
                                ]

labelTop = tk.Label(app,
                    text = "Choose your favourite month")
labelTop.grid(column=0, row=0)

comboExample = ttk.Combobox(app, 
                            values=[
                                    "January", 
                                    "February",
                                    "March",
                                    "April"],
                            postcommand=changeMonth)

comboExample.grid(column=0, row=1)

app.mainloop()

この changeMonth 関数は、選択肢のコンボボックスリストを次のように変更します。

["July",
 "August",
 "September",
 "October"
]

コンボボックスは、GUI の起動後に空を示し、ユーザーがコンボボックスの矢印をクリックした後、上記のように所定の月を表示します。

comments powered by Disqus