2017-03-05 150 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