sair_grid = self.root.ids["sairler_screen"].ids["sair_grid"]
for a in dler:
with open(a,"r",encoding="utf-8") as file1:
for b in file1:
btn = Button(text=b[:-5],on_press=lambda y:self.sairi(b))
sair_grid.add_widget(btn)
def sairi(self,x):
pass
无论我单击哪个按钮调用该函数,它都会产生相同的结果。我希望每个按钮都采用不同的b值,并使用不同的参数调用该函数。使用不同名称创建的所有按钮,但每个按钮都使用文件的最后一个参数调用。我是python和kivy的新手,因此,我们非常感谢每一个帮助。
答案 0 :(得分:0)
这里只有一个名为b
的变量,它会更改其值,直到最后一次执行循环时最后一个变量为止:
for b in file1:
btn = Button(text=b[:-5],on_press=lambda y:self.sairi(b))
sair_grid.add_widget(btn)
因此,您正在创建许多lambda,但是它们在闭包中都使用相同的b
。
该问题的典型简单解决方法是将b的当前值绑定到lambda参数的默认值:
for b in file1:
btn = Button(text=b[:-5],on_press=lambda y, b=b:self.sairi(b))
sair_grid.add_widget(btn)
现在,您创建的每个lambda都有一个本地绑定的b
参数,该参数具有自己的默认值。现在,您创建的每个lambda的默认值b
都不同。