我在级联菜单栏中有一个名称列表,当您单击一个名称时,我希望将关联的ID传递给一个函数。例如,如果您点击' Test1'它将id 4556767传递给函数。
我无法弄清楚该怎么做。我已经尝试使用enumerate将一个整数传递给lambda函数作为'命令'参数然后设置与菜单项索引对应的ID列表。然而,这并不是因为枚举变量当然随每次迭代而变化,所以最后每个项都返回相同的值。
有没有办法让变量永久保留而不是像硬编码那样改变而不是变量?
这是我目前的代码:
blogs = database_handler.get_blogs()
self.blog_menu_ids = []
for i, blog in enumerate(blogs):
self.blog_menu_ids.append(blog[0])
self.menu_blogs.add_command(label=blog[1],
command=lambda: self.load_blog(i))
虽然如果我能做到这一点,我可以像这样立即传递id:
blogs = database_handler.get_blogs()
for blog in blogs:
self.menu_blogs.add_command(label=blog[1],
command=lambda: self.load_blog(blog[0]))
答案 0 :(得分:3)
您想要使用“部分功能应用程序”进行“早期绑定”:
from functools import partial
for i, blog in enumerate(blogs):
self.blog_menu_ids.append(blog[0])
self.menu_blogs.add_command(label=blog[1],
command=partial(self.load_blog, i))
或者按照你的第二个例子:
for blog in blogs:
self.menu_blogs.add_command(label=blog[1],
command=partial(self.load_blog, blog[0]))
答案 1 :(得分:0)
我似乎完全不理解你的问题,但你不是已经非常接近了吗?
for blog in blogs:
self.menu_blogs.add_command(label=blog[1], command=lambda: self.load_blog(blog[0]))
我认为blog[0]
拥有ID,blog[1]
是其名称。
编辑:我看到你编辑了所以我们现在有了相同的答案。