单击数字将其输入到条目小部件上时,它总是添加 10 而不是应该添加的数字
On clicking the numbers to input it onto the entry widget, it always adds 10 rather than the number supposed to
for i in range(1,4):
for j in range(3):
button = tk.Button(text=str(num+1),master=window,padx=40,pady=20,command=lambda:button_click(num+1))
button.grid(row=i,column=j)
num+=1
def button_click(Number):
ent_number.insert(tk.END,Number)
每当我单击任何按钮时,它都会显示相应的数字,即 1、2、3 等。它总是将 10 插入条目小部件。
您可以通过将 num
作为默认参数轻松解决您的问题:
lambda num=num: button_click(num)
为什么这样做?
函数中的pre-defined变量可以是参数也可以是全局变量。优先选择函数参数。
例如,如果你执行下面的代码,它会打印出 10,而不是 6。
def func(num):
print(num)
num = 6
func(10)
在您的代码中,当您使用 lambda:button_click(num+1)
时,num
被视为全局变量,并且 num
的值始终为 10,而不管哪个按钮触发了事件。
但是,当 num
作为参数传递时,参数值不会随着循环的迭代而改变。执行函数时,会考虑num
的参数值,这取决于源按钮。
for i in range(1,4):
for j in range(3):
button = tk.Button(text=str(num+1),master=window,padx=40,pady=20,command=lambda:button_click(num+1))
button.grid(row=i,column=j)
num+=1
def button_click(Number):
ent_number.insert(tk.END,Number)
每当我单击任何按钮时,它都会显示相应的数字,即 1、2、3 等。它总是将 10 插入条目小部件。
您可以通过将 num
作为默认参数轻松解决您的问题:
lambda num=num: button_click(num)
为什么这样做?
函数中的pre-defined变量可以是参数也可以是全局变量。优先选择函数参数。
例如,如果你执行下面的代码,它会打印出 10,而不是 6。
def func(num):
print(num)
num = 6
func(10)
在您的代码中,当您使用 lambda:button_click(num+1)
时,num
被视为全局变量,并且 num
的值始终为 10,而不管哪个按钮触发了事件。
但是,当 num
作为参数传递时,参数值不会随着循环的迭代而改变。执行函数时,会考虑num
的参数值,这取决于源按钮。