ComboboxはTextboxとListboxを組み合わせたようなウィジェットである。外観は1行のテキストボックスだが、右端の▼をクリックすることであらかじめ設定したリストから値を選択することができる。

Comboboxの概要、初期値の設定方法、選択した値の取得方法をまとめた。
【スポンサーリンク】
Comboboxの概要
tkinter.ttkのインポート
Comboboxはtkinter内のttkモジュールをインポートすることで利用可能となる。tkinterのインポートだけでは使用できないことに注意が必要。以下の通り、tkinterとttkの両方をインポートしておく。
import tkinter from tkinter import ttk
概要
Comboboxの外観を以下に示す。

見た目は普通の一行のテキストボックスだが、右端の▼をクリックするとあらかじめ設定された値がリストで表示される。以下の例では、「Easy」、「Normal」、「Hard」という3つの文字列を初期値として与えてある。

選択してみると、Comboboxに選択した文字列が表示される。

Comboboxは様々なアプリで使用されており、省スペースかつ便利なウィジェットである。
初期値を設定する方法
Comboboxのvaluesオプションを設定することで初期値を設定することができる。以下に例を示す。
import tkinter from tkinter import ttk root = tkinter.Tk() #トップレベルウィジェット item_list = ['Easy', 'Normal', 'Hard'] #初期値 test_combobox = ttk.Combobox( master=root, values=item_list, #設定 ) test_combobox.pack() #Comboboxを表示 root.mainloop()
選択した値の取得方法
選択した値を取得するには、ComboboxSelected
イベントを利用する必要がある。これは、Combobox内の値を選択したときに発生するイベントで、bind
メソッドを用いて特定の関数に紐づけることができる。また、選択した値はget
メソッドで取得することができる。
以下の例を実行すると、選択した値を出力することができる。
import tkinter from tkinter import ttk #選択時に実行される関数 def show_selected(event): #eventを引数に print(test_combobox.get()) #選択した値を表示 root = tkinter.Tk() item_list = ['Easy', 'Normal', 'Hard'] test_combobox = ttk.Combobox( master=root, values=item_list, ) #値選択時に発生するイベントと関数を紐づけ test_combobox.bind( '<<ComboboxSelected>>', #選択時に発生するイベント show_selected, #呼び出す関数 ) test_combobox.pack() root.mainloop()
【スポンサーリンク】
選択した値をLabelに表示
選択した値をprint出力するのではなく、Label等に表示させたい場合は、tkinter.StringVar等のVariableクラスを使用すると良い。
また、Comboboxクラスを継承したクラスを作成し、その中でイベントと実行する関数の紐づけを行う。やっていることは前回と同じだが、中身が非常にわかりやすくなり、使い勝手が向上する。

import tkinter from tkinter import ttk #Comboboxクラスを継承したTestCombobox2クラス class TestCombobox2(ttk.Combobox): def __init__(self, li, var, master=None): #var(StringVar)を追加 super().__init__(master, values=li) self.var = var #var(StringVar)をインスタンス変数化 self.bind( '<<ComboboxSelected>>', self.show_selected, ) def show_selected(self, event): self.var.set(self.get()) #選択した値をvar(StringVar)にセット if __name__ == "__main__": root = tkinter.Tk() #StringVarとラベルの生成 var = tkinter.StringVar(root) l = tkinter.Label( textvariable=var, #textvariableオプションにStringVarをセット master=root, ) l.pack() li = ['Easy', 'Normal', 'Hard'] c = TestCombobox2(li, var, master=root) #TestCombobox2を生成 c.pack() root.mainloop()
StringVarをLabelのtextvariableオプションにセットしておき、Combobox選択時にStringVarに値をセットすることで即座に選択した値がLabelに反映される。
【スポンサーリンク】