我想遍历按钮列表并使用不同的功能绑定每个按钮。但结果总是最后一个Button的功能,而不是列表中的所有功能。 这是我的代码:
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.label import Label
from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button
class MyApp(App):
def build(self):
parent = StackLayout()
button_list = []
for i in range(0,11):
button_list.append( Button(text = str(i), size_hint = (None,0.15)) )
print i
for a_button in button_list:
parent.add_widget(a_button)
a_button.bind( on_press = lambda x: parent.add_widget( Label(text = a_button.text) ) )
return parent
if __name__ == "__main__":
MyApp().run()
我猜测我的lambda函数存在一些问题。
答案 0 :(得分:0)
这是一个经典的python问题,实际上与kivy无关。例如,讨论它here
答案 1 :(得分:0)
对于那些在 6 年后仍然遇到这个问题的人,这是我的解决方案:
def buttongenerator(layout):
hellodict = {}
for k in range(50):
hellodict[str(k)] = 'Hello' + str(k)
btn = Button(text=str(k),
size_hint_y=None,
height='40dp')
btn.bind(on_release=(lambda instance, var=hellodict[str(k)]: print(var)))
layout.add_widget(btn)
布局只是指网格/框布局。
instance
变量是必需的,否则按钮对象将被传递到 lambda 函数中,并且(在这种情况下)将作为字符串打印到控制台。 instance
变量“吸收”按钮对象,如果这有意义的话。 (变量不必命名为 instance
,它必须存在)