2017-03-05 74 views
1

我正在試圖製作一個按鈕,打印值我分配給他們。 在我看來,所有按鈕都應該在文本值上打印相同的值。相反,他們都打印「4」。什麼是賴特的方式來解決這個問題?Python,在lambda函數中賦值正確的方式

from tkinter import * 

root = Tk() 

def printFunc(text): 
    print(text) 

list=[0,1,2,3,4] 

for i in list: 

    w = Button(root, text=list[i],command=lambda: printFunc(list[i])).pack() 

root.mainloop() 

回答

1

的解決方案是目前則拉姆達構造

from Tkinter import * 


root = Tk() 

def printFunc(text): 
    print(text) 

lst=[0,1,2,3,4] 

for i in lst: 

    w = Button(root, text=lst[i],command=lambda x=lst[i]: printFunc(x)).pack() 

root.mainloop() 
+0

哇,非常感謝您的幫助:D <3 – yasinfy

1

這是一個非常普遍的問題初學者提供一個默認值,因爲你不知道如何lambda作品。解決方案是使用functools.partial而不是lambda。

from tkinter import * 
from functools import partial 

root = Tk() 

def printFunc(text): 
    print(text) 

list=[0,1,2,3,4] 

for i in list: 
    w = Button(root, text=list[i],command=partial(printFunc, list[i])) 
    w.pack() 

root.mainloop() 

同時,始終把pack()在新行,這樣就避免另一種非常常見的初學者的問題。

+0

感謝您的回覆!我明白你的意思,下次我會小心點:) – yasinfy