如何在循环中绑定事件?

时间:2014-02-08 14:07:00

标签: python python-3.x tkinter

请帮助修复脚本。

import tkinter

root = tkinter.Tk()
root.mainloop

slides = {
    'blue': 'active',
    'red': 'active',
    'green': 'unctive',
    'orange': 'active',
    'navy': 'active'
}


for (i, color) in enumerate(slides.keys()):
    item = tkinter.Button( root,
                    text=color,
                    width=20,
                    height=10,
                    relief='raised',
                    borderwidth=5,
                    bg=color
                )
    item.bind('<Button-1>', lambda event: invertItem(i, color))
    item.pack(side='left')

def invertItem(i, color):
    print(i, color)

我需要在点击按钮后显示数字和名称颜色。现在由于某种原因总是显示“4蓝色”

1 个答案:

答案 0 :(得分:2)

import tkinter

root = tkinter.Tk()

slides = {
    'blue': 'active',
    'red': 'active',
    'green': 'unctive',
    'orange': 'active',
    'navy': 'active'
}

for (i, color) in enumerate(slides.keys()):
    item = tkinter.Button( root,
                    text=color,
                    width=20,
                    height=10,
                    relief='raised',
                    borderwidth=5,
                    bg=color
                )
    item.config(command=lambda i=i, color=color: invertItem(i, color))
    item.pack(side='left')

def invertItem(i, color):
    print(i, color)

root.mainloop()

的变化:

  • 在设置小部件后调用root.mainloop()
  • 使用command选项代替bind
    • 添加默认参数icolor。否则,他们会引用i循环的最后colorfor