我正在制作一个视频搜索应用程序,我遇到了这个问题,我无法解决它。用户输入关键字,应用程序根据搜索结果返回视频标题。之后,应用程序显示结果:
class SecondWindow(Screen):
def on_enter(self):
try:
self.ids.container.clear_widgets()
except:
pass
for i in range (len(vid_list)):
self.ids.container.add_widget(
OneLineAvatarIconListItem(text=vid_list[i], on_release =lambda v_id:self.send_link(vid_id[i]))
)
def send_link(self, v_id):
print(v_id) #always outputs the last vid_id no matter which one I click
这工作完美,所有的视频得到独特的标题显示。我还设置了它应该根据索引发送videos_id,但它总是发送最后一个,不管我点击哪个。
我该如何解决这个问题?
这是定义使用循环索引的lambda
时常见的问题。修复方法是定义另一个等于循环索引的索引。这样的:
for i in range (len(vid_list)):
self.ids.container.add_widget(
OneLineAvatarIconListItem(text=vid_list[i], on_release=lambda v_id, j=i:self.send_link(vid_list[j]))
)
注意j=i
和vid_list[j]
。