lambda 事件:做什么?
What does lambda event: do?
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
谢谢!
事件是 lambda 函数的参数。换句话说,如果你定义
x = lambda a: a+10
您可以 运行 x(10)
得到 20
.
另一方面,你不能
x = lambda: 10
x(10)
因为那个 lambda 函数没有参数
您的错误发生是因为 tkinter 试图将位置参数传递给不带任何参数的 lambda 函数。
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
谢谢!
事件是 lambda 函数的参数。换句话说,如果你定义
x = lambda a: a+10
您可以 运行 x(10)
得到 20
.
另一方面,你不能
x = lambda: 10
x(10)
因为那个 lambda 函数没有参数
您的错误发生是因为 tkinter 试图将位置参数传递给不带任何参数的 lambda 函数。