Python 3.x 将值传递给按钮单击事件
下面的代码创建了10个按钮。当用户单击按钮时,我们需要知道单击了哪个按钮Python 3.x 将值传递给按钮单击事件,python-3.x,Python 3.x,下面的代码创建了10个按钮。当用户单击按钮时,我们需要知道单击了哪个按钮 import tkinter as t def click_button(number): print("you clicked %d" % number) root = t.Tk() for number in range(0, 10): btn = t.Button(root, text=number, padx=15, command=lambda: click_button(number))
import tkinter as t
def click_button(number):
print("you clicked %d" % number)
root = t.Tk()
for number in range(0, 10):
btn = t.Button(root, text=number, padx=15, command=lambda: click_button(number))
btn.grid(row=0, column=number)
root.mainloop()
似乎
number
上的闭包是通过引用给出一个简单的循环测试的,但是我不确定这是正确的行为
这是通过使用partial
实现的,我确信它在构建partial时捕获了number
的值:
import functools as fc
import tkinter as t
def click_button(number):
print("you clicked %d" % number)
root = t.Tk()
for number in range(0, 10):
btn = t.Button(
root,
text=number,
padx=15,
command=fc.partial(click_button, number))
btn.grid(row=20, column=number)
root.mainloop()
似乎
number
上的闭包是通过引用给出一个简单的循环测试的,但是我不确定这是正确的行为
这是通过使用partial
实现的,我确信它在构建partial时捕获了number
的值:
import functools as fc
import tkinter as t
def click_button(number):
print("you clicked %d" % number)
root = t.Tk()
for number in range(0, 10):
btn = t.Button(
root,
text=number,
padx=15,
command=fc.partial(click_button, number))
btn.grid(row=20, column=number)
root.mainloop()
您需要将数字作为lambda参数传递。 尝试: 关于lambda函数“捕获”局部变量的方式,请参见以下内容: 在这里:
简而言之,通过将number作为参数传递给lambda,可以确保对迭代的number值执行number的副本。如果不将其作为参数传递,则所有lambda函数“number”都指向同一个变量(循环编号),该变量仅在调用lambda函数时计算。当时它被称为数字,数值是“9”。这与C++中的“for循环”变量的范围非常不同,即循环本身。在python中,只要有人(这里是lambda)引用循环变量,循环变量就存在。您需要将数字作为lambda参数传递。 尝试: 关于lambda函数“捕获”局部变量的方式,请参见以下内容: 在这里:
简而言之,通过将number作为参数传递给lambda,可以确保对迭代的number值执行number的副本。如果不将其作为参数传递,则所有lambda函数“number”都指向同一个变量(循环编号),该变量仅在调用lambda函数时计算。当时它被称为数字,数值是“9”。这与C++中的“for循环”变量的范围非常不同,即循环本身。在python中,只要有人(这里是lambda)引用循环变量,循环变量就存在。它不应该是
lambda编号:单击按钮(编号)
?文档中对命令=
有何说明?忽略我的注释不应该是lambda编号:单击按钮(编号)
?文档中关于命令=
的内容是什么?忽略我的comments@dhiman也不确定,我希望lambda声明在time@dhiman也不确定,我希望lambda声明在时间点结束(结束
)号,Python lambda不关闭作用域变量,您必须显式地将其指定为输入参数?这同样有效。。但我不明白其中的道理。任何要读取的引用?因此,Python lambda不关闭作用域变量,您必须显式地将其指定为输入参数?这同样有效。。但我不明白其中的道理。有参考资料要读吗?