gpt4 book ai didi

python - Tkinter - 如何打开最近的文件?

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:05 25 4
gpt4 key购买 nike

我正在尝试编写一个函数来打开从子菜单中选择的最近文件,但是当我循环浏览最近文件时,最后一个文件是唯一被识别的文件。

这里有一段代码示例来说明这个问题:

from Tkinter import *

class App(Frame):
def __init__(self, root):
Frame.__init__(self, root)
menubar = Menu(self, tearoff=0)
fileMenu = Menu(self, tearoff=0)
recentMenu = Menu(self, tearoff=0)

menubar.add_cascade(label="File", menu=fileMenu)
fileMenu.add_cascade(label="Open Recent", menu=recentMenu)
for name in ('file1.txt', 'file2.txt', 'file3.txt'):
recentMenu.add_command(label=name, command=lambda: self.load_file(name))

root.configure(menu=menubar)
root.geometry("200x200")

def load_file(self, f):
print f

if __name__ == "__main__":
root = Tk()
App(root).pack(fill="both", expand=True)
root.mainloop()

例如,当我点击 file2.txt 时,程序会输出 file3.txt。我确定我遗漏了一些微不足道的东西,但我不知道那是什么。

最佳答案

以下作品:

...

    for name in ('file1.txt', 'file2.txt', 'file3.txt'):
recentMenu.add_command(label=name, command=self.load_file(name))

...

def load_file(self, f):
def fun():
print f
return fun

在您的版本中,此时,当您调用回调函数时,name 指的是实例file3.txt。在我的版本中,实例 file1.txtfile2,txt 等在闭包内捕获(严格来说不是闭包,但非常相似)。

参见 closures在 SO 中。

关于python - Tkinter - 如何打开最近的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21963373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com