python_tkinter_Listbox_list_item_リストアイテム_クリック時のイベントリスナ?

 

pythonの tkinterの Listboxは

その内部の各行をクリックしたときの

動作を定義できるような イベント・リスナを追加できるのでしょうか?



はい、Tkinter の `Listbox` には各行

(アイテム)をクリックしたときの動作を定義できる

イベントリスナーを追加できます。


具体的には、`<<ListboxSelect>>` イベントをバインドすることで、

選択されたアイテムに応じた処理を実行できます。


### 実装例

```python


import tkinter as tk


def on_select(event):

    # 選択された項目のインデックスを取得

    selected_index = listbox.curselection()

# 空のリストでないことを確認

    if selected_index:  

        selected_text

= listbox.get(selected_index[0])

        label.config(

text=f"選択された項目: {selected_text}")


# メインウィンドウの作成

root = tk.Tk()

root.title("Listbox 選択イベント")


# Listboxの作成

listbox = tk.Listbox(root, height=5)


items = ["Apple", "Banana", 

"Cherry", "Date", "Elderberry"]

for item in items:


    listbox.insert(tk.END, item)

listbox.pack()


# 選択された項目を表示するラベル

label

 = tk.Label(root, text="選択された項目: なし")

 

label.pack()


# イベントリスナーの追加

listbox.bind(

"<<ListboxSelect>>", on_select)


# ウィンドウの実行

root.mainloop()


```


### 説明


1. `listbox.bind("<<ListboxSelect>>", on_select)` により、

リストのアイテムをクリックしたときに `on_select` 関数が実行される。


2. `listbox.curselection()` を使って、

選択されたアイテムのインデックスを取得。


3. `listbox.get(index)` を使って、

インデックスに対応するテキストを取得。


4. 取得したテキストを `label.config(text=...)` で表示。


この方法で、

`Listbox` の各行をクリックした際の動作を定義できます。


コメント