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` の各行をクリックした際の動作を定義できます。
コメント
コメントを投稿