我正在尝试从列表中创建标签,绑定'<Enter>'
和'<Leave>'
事件以使标签悬停时背景颜色发生变化(默认为蓝色,悬停时为红色) ,然后打包标签。
目前,我正在将每个标签添加到字典中并引用它,但是当光标进入任何标签时,最后一个(也是最后一个)标签的背景颜色会发生变化。
from tkinter import *
random_list = ['ABC', 'DEF', 'GHI', 'JKL', 'MNO', 'PQR']
class x:
def __init__(self, master):
y = {}
for i in random_list:
y[i] = Label(master, text=i, bg='#00f')
y[i].pack()
y[i].bind('<Enter>', lambda event: y[i].configure(background='#f00'))
y[i].bind('<Leave>', lambda event: y[i].configure(background='#00f'))
root = Tk()
app = x(root)
root.mainloop()
答案 0 :(得分:3)
您的lambda
表达式正在捕获i,并导致此问题。
您应该能够通过在lambda定义中指定i = i
来解决此问题。
即,使用lambda语句的行应如下所示:
y[i].bind('<Enter>', lambda event, i=i: y[i].configure(background='#f00'))
y[i].bind('<Leave>', lambda event, i=i: y[i].configure(background='#00f'))