tkinter 複数のリストボックスのイベント処理をしたい

実現したいこと

Python とtkinterで制作したGUIにリストボックスを2個付けて項目選択のイベント処理で使いたいと思っています。

前提

2個のリストボックスそれぞれにbindでイベント関数を割り当てて動作させたところ、一方のボックスの項目を選択すると両方のボックスのイベント関数が実行されることがあります。
エラーメッセージなどはなく、2つのイベント関数とも正常に動作しています。
bindの使い方が間違っているのでしょうか。

該当のソースコード

Python 3
ソースコード

import tkinter as tk

def box_1_selected():
print('box_1_selected')
def box_2_selected():
print('box_2_selected')
def box_3_selected():
print('box_3_selected')

root = tk.Tk()
root.geometry('300x200')

box_1 = tk.Listbox(root)
box_2 = tk.Listbox(root)
box_3 = tk.Listbox(root)
box_1.place(x=50, y=50, width=50, height=100)
box_2.place(x=130, y=50, width=50, height=100)
box_3.place(x=210, y=50, width=50, height=100)
box_1.bind('<<ListboxSelect>>',lambda e: box_1_selected())
box_2.bind('<<ListboxSelect>>',lambda e: box_2_selected())
box_3.bind('<<ListboxSelect>>',lambda e: box_3_selected())

value_1 =['Box_1', 'AAA', 'BBB', 'CCC', 'DDD']
value_2 =['Box_2', 'aaa', 'bbb', 'ccc', 'ddd']
value_3 =['Box_3', 'WWW', 'XXX', 'YYY', 'ZZZ']
for i in range(5):
box_1.insert(tk.END, value_1[i])
box_2.insert(tk.END, value_2[i])
box_3.insert(tk.END, value_3[i])

root.mainloop()

### 試したこと 上記の3つのListboxを使うコードで試したところ 1) 同じボックスの項目選択を繰り返してもそのボックスのイベントだけが発生する(正常動作)   box_1を2回選択した動作結果     box_1_selected     box_1_selected 2) box_1 を選択した後にbox_3 を選択すると、box_3 のイベント処理の後にbox_1 のイベント処理が続けて行われる。選択するボックスの順に関係なく直前のボックスのイベントが余計に発生してしまう。   box_1を2回選択後にbox_3を1回選択した結果     box_1_selected     box_1_selected     box_3_selected  正しいイベント処理     box_1_selected  余計なイベント処理

コメントを投稿

0 コメント