lambda:
和lambda event:
有什么区别。我做了一些研究,但仍然无法找出差异。
考虑这段代码:
import tkinter as tk
root = tk.Tk()
r = 0
def func(n):
r = n
#works
b1 = tk.Button(root, text='1')
b1.bind('<Button-1>', lambda event: func(1))
b1.pack()
#does not work
b2 = tk.Button(root, text='2')
b2.bind('<Button-1>', lambda: func(2))
b2.pack()
tk.mainloop()
为什么按钮 2 可以工作而按钮 1 却不起作用?具体来说,我收到此错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tkinter/__init__.py", line 1921, in __call__
return self.func(*args)
TypeError: <lambda>() takes 0 positional arguments but 1 was given
谢谢!
Event 是 lambda 函数的参数。换句话说,如果你定义
x = lambda a: a+10
您可以运行
x(10)
来获取 20
。
另一方面,你不能这样做
x = lambda: 10
x(10)
由于 lambda 函数不带参数
发生错误是因为 tkinter 尝试将位置参数传递给不接受任何参数的 lambda 函数。
因为,[lambda 事件] 将键连接到特定函数,并且只有当您在程序中时才能访问该键。强调文本