2011-08-12 340 views
1

我創建了十個按鈕,按鈕文本標記爲1到10.以下代碼正確地創建了10個按鈕和標籤。但它將打印9作爲所有按鈕的輸出。我希望它做的是打印按鈕,屏幕的相應數量的,因此,例如,如果用戶按下按鈕2,那麼它應該打印2.Python Tk多個按鈕創建問題

def create(): 
for i in range (1,10): 
    lst.insert(i,Button(text=i,command=lambda: prnt(i)).pack()) 

(注:「PRNT(我)」是一個函數,簡單地打印我的值。 'lst'是一個存儲創建按鈕的列表。)

從輸出中我可以說程序使用最新的i值作爲函數的參數用戶按下按鈕,那麼如何解決這個問題,而不必爲每個按鈕編寫10行代碼。

回答

2

試試這個(注意命名參數的拉姆達):

def create(): 
    for i in range (1,10): 
        lst.insert(i,Button(text=i,command=lambda i=i : prnt(i)).pack()) 

這通過我的的lambda作爲一個局部變量。如果沒有這個,你正在使用對原始變量的引用,當然,這個變量總是會解析爲原始變量中存儲的任何變量。

+0

非常感謝,解決了這個問題。 我是Python的新手,在不知道它如何做的情況下使用lambda。再次感謝您的幫助 :) – Alphaceph