2014-02-08 37 views
0

请帮助修复脚本。如何在循环中绑定事件?

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个蓝色”

回答

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
    • 添加默认参数i,color。否则,他们引用for循环的最后i,color
+0

但是鼠标点击在哪里? :) – Sergey

+0

@ user3218592,单击按钮时调用给'command'选项的回调函数。 – falsetru

相关问题