2014-11-25 100 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() 

注意:爲防止後期綁定問題,我在上面的代碼中使用了默認參數。