代码是:
from Tkinter import * admin = Tk() def button(an): print an print 'het' b = Button(admin, text='as', command=button('hey')) b.pack() mainloop()
该按钮不起作用,它在没有我的命令的情况下打印了“hey”和“ het”一次,然后,当我按下按钮时,什么也没发生。
考虑以下代码:
b = Button(admin, text='as', command=button('hey'))
它的功能与此完全相同:
result = button('hey') b = button(admin, text='as', command=result)
该command选项引用了一个函数,这是你需要向其传递函数名称的一种奇特的方式。要传递引用,你必须仅使用名称,而不使用括号或参数。例如:
command
b = Button(... command = button)
如果要传递诸如“her”之类的参数,则必须使用一些额外的代码:
button
lambda
functools.partial
要创建一个button使用参数调用你的函数的lambda函数,你可以执行以下操作:
lambda: button('hey')
你最终得到的功能在功能上等同于:
def some_name(): button('hey')
如前所述,lambda返回对该无名函数的引用。由于参考是该command选项所期望的,因此你可以lambda直接在按钮的创建中使用它:
b = Button(... command = lambda: button('hey'))