微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Python 的 Tkinter 创建动态菜单例如最近的文件列表

如何解决使用 Python 的 Tkinter 创建动态菜单例如最近的文件列表

我是一名经验丰富的 Python 程序员,但目前需要通过 Tkinter 实现一个基本的 GUI。很明显,Python 并没有努力成为最好的 UI/UX 平台,我已经完成了这一点,但我遇到了一个基本问题,我似乎无法在网络上找到一个简单的解决方案。

我需要实现一个可变长度的最近文件列表。所以我尝试这样做:

def __file_menu(self):
        menu = tk.Menu(self,tearoff=False)
        menu.add_command(label="New Project...",command=self.__file_new,state=tk.disABLED)
        menu.add_command(label="Open Project...",command=self.__file_open)
        recent_list = tk.Menu(menu,tearoff=False)
        for index,project in enumerate(self._recent_projects):
            name = os.path.basename(project).title()
            recent_list.add_command(label=name,command=lambda: self.__open_recent(index))
        menu.add_cascade(label="Recent Projects...",menu=recent_list)

这对显示正确的项目很有用,但我不能正确的是在 lambda 函数中传递一个唯一值,该值标识已选择哪些菜单项,以便我可以在此处使用它:

    def __open_recent(self,item):
        self.__load_project(self._recent_projects[item])

index 的值总是相同的,即它的最后一个值。那么,如何从所选菜单项中获取唯一标识符(名称、索引等)?

解决方法

您必须将 lambda 更改为如下所示:

recent_list.add_command(label=name,command=lambda i = index: self.__open_recent(i))

这将正确的索引传递给函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。