2014-11-25 88 views
0

如果已经有人提问,但很抱歉,但我一直无法找到它。我也刚开始学习编程,所以反馈意见。 :)在Tkinter中删除自己的按钮

我的最终目标是创建一个按钮的“x”网格,当按下时会改变它们自己的颜色。我想用这个来制作一个网格,我可以上传到我制作的POV玩具。这段代码创建了一个8个按钮的列,每个按钮都有一个回调函数作为参数传递。作为回调函数的想法可以对按钮执行操作,例如更改颜色或将其删除。

import Tkinter  
def unpack(i): 
    buttons[i].pack_forget() 
    print i 

top = Tkinter.Tk() buttons = [] for i in range(0, 8): 
    buttons.append(Tkinter.Button(top, text='Hello', command=lambda: unpack(i))) 

for button in buttons: 
    button.pack() 

top.mainloop() 

当我这样做,我得到一个窗户的8个按钮栏,当我点击一个一个被删除。当我点击一下时,什么都没有发生。在我的命令提示符下,无论按哪个按钮,都可以打印数字7。我怀疑问题出在创建按钮的for循环中,但我不知道如何解决它。

谢谢!

回答

3

将按钮对象传递给回调函数而不是索引,因为索引在列表中的项删除后发生更改。

import Tkinter  

top = Tkinter.Tk() 
for i in range(0, 8): 
    btn = Tkinter.Button(top, text='Hello') 
    btn['command'] = lambda b=btn: b.pack_forget() 
    btn.pack() 

top.mainloop() 

注意:为防止后期绑定问题,我在上面的代码中使用了默认参数。