如何解决通过遍历列表用命令填充Tkinter菜单
我正在使用列表和相应的字典(都通过pickle存储)来存储程序中最近查看的项目,以用于在Tkinter菜单栏中构建最近的项目菜单。
每次搜索新项目并将其加载到程序中时,菜单都会通过搜索功能进行更新。单击菜单中的最新项目之一,会将该项目代码发送到加载它的函数。
我在构建初始菜单时遇到问题,并且无法正确显示每个菜单项的正确项代码。我已将代码简化为以下示例:
import tkinter as tk
from tkinter import Menu
def goto_recent(item):
print(item)
window = tk.Tk()
window.option_add("*tearOff",False)
menubar = Menu(window)
window.config(menu = menubar)
recent_menu = Menu(menubar)
menubar.add_cascade(menu=recent_menu,label="Recent")
# Build Recent Menu
codes= ["Apple","Banana","Orange"]
details = {"Apple" : "This is an apple","Banana" : "This is a banana","Orange" : "This is an orange"}
for i,key in enumerate(codes):
recent_menu.insert_command(i,label = key + " - " + details[key],command = lambda: goto_recent(key))
window.mainloop()
以正确的顺序正确构建菜单,并带有正确的标签。但是,单击三个菜单选项中的任何一个都会输出:
橙色
似乎我的代码在lambda命令中保留了key
变量引用,而不是在循环过程中插入其值(如指定标签时那样)。我通过在代码底部添加key = "Testing"
来确认这一点,然后导致所有菜单单击输出:
测试
我还在学习Python,所以我猜这是我不习惯在其他编程语言中遇到的某种语法问题。我在这里想念什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。