リストボックスで選択した値を取得しよう
前回はListboxウィジェットを使ってリストボックスを表示しました。
今回はリストボックスで選択した値を取得してみましょう。
イベントを取得する
リストボックスで選択した値を取得するには、bind()メソッドを使います。
bind()メソッドの使い方は、以下の通りです。
オブジェクト名.bind(シーケンス記述子, 関数, 追加)
第1引数のシーケンス記述子は、どのイベントの時に処理を実行するかを指定します。
例えば、なんらかのキーが押された場合は、"<KeyPress>" を指定します。
リストボックスの選択イベントは、"<<ListboxSelect>>" となります。
ListboxSelect は仮想イベントと呼ばれるもので、< > を二つ重ねます。
さらに、シングルクォーテーション(')またはダブルクォーテーション(")で囲みます。
第2引数は、イベントが発生した時に呼び出される処理を定義した関数を指定します。
第3引数は、同一ウィジェットの同一イベントで処理を追加したい場合に、"+" と記述します。
追加の処理がない場合は省略します。
実行する関数を定義する
実行する関数の書き方は、以下の通りです。
定義した関数に、eventオブジェクトが渡されます。
def 関数名(event):
event.widget とすると、イベント発生元のウィジェット(今回はListbox)の情報を参照できます。
選択された項目を取得する
リストボックスで選択された項目を取得するやり方は、以下の通りです。
ウィジェット名.curselection()
curselection()メソッドを使うと、リストボックスで選択されたインデックス番号を返します。
インデックス番号は先頭が0から始まります。
インデックス番号に対応した値を取得する
インデックス番号に対応する値を取得するやり方は、以下の通りです。
ウィジェット名.get(インデックス番号)
引数には、curselection()メソッドで取得したインデックス番号を渡します。
Listboxウィジェットで選択した値を取得するプログラム
Listboxウィジェットで選択した値を取得するプログラムは、以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
### インポート import tkinter ### 選択インデックス取得関数 def get_index(event): ### 選択インデックス取得 index = event.widget.curselection() ### 選択名称表示 print(event.widget.get(index)) ### メイン画面作成 main = tkinter.Tk() ### 画面サイズ設定 main.geometry("640x400") ### 画面色設定 main.configure(bg="lime") ### リストボックス作成 listbox = tkinter.Listbox(master=main, font=("HG丸ゴシックM-PRO",24), bg="yellow", height=5) for name in ("明治", "大正", "昭和", "平成", "令和"): listbox.insert(tkinter.END, name) ### リストボックス配置 listbox.pack(pady=20) ### リストボックス選択時のイベント取得 listbox.bind("<<ListboxSelect>>", get_index) ### イベントループ main.mainloop() |
前回と同じ画面が表示され、リストボックスで選択した値がコンソールに表示されます。
以下の実行例は、リストボックスから昭和を選択した結果です。
実行例
> tkinter9-1.py
昭和