从askopenfilename打印变量

1 投票
1 回答
586 浏览
提问于 2025-04-18 15:44

每当我打印这个

def callback():
    file_name = askopenfilename(filetypes=(("Music File", "*.mp3"),
                                      ("Video files", "*.mpeg")))
    file_name = file_name.split("/")[-1]
    a = str(file_name)
    return a 

print a

file_name = Button(root, text="open", command=callback)
file_name.pack(side=Tkinter.TOP)

输出会是这样的

.35430920L

但是当我使用全局变量时,它会打印出我想要的文件名

def callback():
    global a
    file_name = askopenfilename(filetypes=(("Music File", "*.mp3"),
                                      ("Video files", "*.mpeg")))
    file_name = file_name.split("/")[-1]
    a = str(file_name)
    print a

file_name = Button(root, text="open", command=callback)
file_name.pack(side=Tkinter.TOP)

输出会是这样的

"example.mp3"

1 个回答

2

输出是按照执行顺序进行的。在你的第一个例子中,变量 aprint a 运行之前就被赋值为 .35430920L,而且从时间上看,print 语句在文件对话框打开之前就已经执行了,因此在这里打印所选文件的值是不可能的。

在后面的例子中,因为是在回调函数里,结果已经是知道的了。注意,在这种情况下你甚至不需要使用全局变量。(你可以去掉 global a,除非你需要在那个函数外使用这个结果)。

Tkinter 使用的是事件驱动的编程方式,它会为每个发生的事件调用回调函数。对于任何较大的程序,你想要做的就是把你的应用程序和控件放在一个类里,并把文件名这样的东西存储在类的属性中。

撰写回答