実現したいこと
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 コメント