Tkinter Combobox
ttk.Combobox とは?
Combobox (コンボボックス) はドロップダウンリストと、Entry (テキストボックス) の組み合わせボックスです。 自由に入力できる他、決められた値をドロップダウンリストから選択することもできます。
「ドロップダウンリスト」と「テキストボックス (Entry)」のコンボなので、「コンボ」ボックスです。
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 のサンプルコード
ここでは選択項目が変わったときに選択された値を出力します。また、ボタンを押したときにも、その時点での値を表示します。
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 オブジェクトを受けとるので、ひとつ引数を受けとるようにしておきます。