与Tkinter的鼠标单击事件绑定似乎比预期慢了一步



我正在与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>>

最新更新