Tkinter Combobox

ttk.Combobox とは?

Combobox (コンボボックス) はドロップダウンリストと、Entry (テキストボックス) の組み合わせボックスです。 自由に入力できる他、決められた値をドロップダウンリストから選択することもできます。

「ドロップダウンリスト」と「テキストボックス (Entry)」のコンボなので、「コンボ」ボックスです。

tkinter ttk.Combobox

ttk.Combobox のオプション

ttk.Combobox ウィジェットの標準オプション

ttk.Combobox ウィジェットでは次の標準オプションが利用できます。

  • class
  • cursor
  • style
  • takefocus

ttk.Combobox ウィジェットの justify オプション

ttk.Combobox ウィジェットの justify オプションはウィジェット内で文字がどのように整列するか指定します。 有効な値は left, center, right です。

ttk.Combobox ウィジェットの height オプション

ttk.Combobox ウィジェットの height オプションはリストボックスの高さを指定します。

ttk.Combobox ウィジェットの postcommand オプション

ttk.Combobox ウィジェットの postcommand オプションはリストボックスを表示する直前に評価する関数を指定します。

ttk.Combobox ウィジェットの state オプション

ttk.Combobox ウィジェットの state オプションはコンボボックスの状態を指定します。 有効な値は normal, readonly, disabled です。

readonly の場合はコンボボックス内の文字の編集はできません。

ttk.Combobox ウィジェットの textvariable オプション

ttk.Combobox ウィジェットの textvariable オプションはコンボボックスの値を保持するグローバル変数を指定します。

ttk.Combobox ウィジェットの values オプション

ttk.Combobox ウィジェットの values オプションは、ドロップダウンに表示する値のリストを指定します。

ttk.Combobox ウィジェットの width オプション

ttk.Combobox ウィジェットの width オプションは Entry ウィンドウの表示幅を文字数で指定します。

ttk.Combobox のスタイル

ttk.Combobox のスタイルクラス名は TCombobox です。

TCombobox では次のオプションが指定できます。

  • arrowcolor
  • arrowsize
  • background : 背景色の設定
  • bordercolor
  • darkcolor
  • focusfill
  • foreground : 文字色の設定
  • fieldbackground
  • insertwidth
  • lightcolor
  • padding
  • postoffset
  • selectbackground
  • selectforeground

ttk.Combobox のイベント

コンボボックスは、ユーザーがドロップダウンから値を選択した時に <<ComboboxSelected>> イベントを生成します。

コンボボックスの bind() メソッドを用いて、イベントと関数を関連付けすることができます。

Tkinter Combobox のサンプルコード

ここでは選択項目が変わったときに選択された値を出力します。また、ボタンを押したときにも、その時点での値を表示します。

Tkinter GUI window with combobox

from tkinter import *
from tkinter import ttk

if __name__ == '__main__':
    fruits = ['Apple', 'Banana', 'Grape']

    root = Tk()
    root.title('Combobox 1')

    # Frame
    frame = ttk.Frame(root, padding=10)
    frame.grid()

    # Combobox
    v = StringVar()
    cb = ttk.Combobox(
        frame, textvariable=v, 
        values=fruits, width=10)
    cb.set(fruits[0])
    cb.bind(
        '<<ComboboxSelected>>', 
        lambda e: print('v=%s' % v.get()))
    cb.grid(row=0, column=0)

    # Button
    button1 = ttk.Button(
        frame, text='OK', 
        command=lambda: print('v=%s' % v.get()))
    button1.grid(row=0, column=1)

    root.mainloop()

Combobox の値は textvariable 属性で指定した変数にその都度格納されます。

Combobox の選択が変更したときのコールバックは bind メソッドを用いて、 <<ComboboxSelected>> 仮想イベントにコールバック関数をアタッチします。

コールバックメソッドは Event オブジェクトを受けとるので、ひとつ引数を受けとるようにしておきます。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Python 入門