我正在与Tkinter练习事件绑定。一个基本的鼠标点击事件(不是双击事件)至少在我看来很奇怪。下面是我的代码:
from tkinter import *
def change(event):
sel = Listbox0.curselection()
print(sel)
for val in sel:
if val == 0:
root.configure(background='red')
elif val == 1:
root.configure(background='green')
elif val == 2:
root.configure(background='yellow')
root = Tk()
root.geometry('250x275')
Listbox0 = Listbox(root, height=3)
Listbox0.insert(0, 'Red')
Listbox0.insert(1, 'Green')
Listbox0.insert(2, 'Yellow')
Listbox0.bind('<Button-1>', change)
Listbox0.pack()
root.mainloop()
正如你所看到的,我的代码应该根据列表框上选择的颜色来改变背景颜色。然而,它的效果缓慢了一步。首先,当我在主循环运行后单击任何项时,什么都没有发生。在那之后,每次我点击任何项目,背景都会改变,但会变成我刚才点击的颜色。我有一个线索通过print(sel)在函数中,但不知道我如何修复它。
这是因为回调函数在Listbox
的默认处理程序之前执行。因此,当回调函数执行时,还没有设置选择,因为它是由默认处理程序设置的。
可以结合<ButtonRelease-1>
或<<ListboxSelect>>
。