从askopenfilename打印变量

时间:2014-08-02 07:34:51

标签: python tkinter

每当我打印这个

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 个答案:

答案 0 :(得分:2)

输出按执行顺序发生。在您的第一个示例中,变量a.35430920L运行之前被赋予值print a,并且在文件对话框实际上甚至打开之前按时间顺序发生print语句,因此在那里打印所选文件的值是不可能的。

在后一种情况下,在回调函数中,结果已知。请注意,您甚至不需要该案例的全局变量。 (您可以删除global a,除非您需要该功能之外的结果。)

Tkinter使用事件驱动的编程范例,它为每个发生的事件调用回调函数。你想要为任何更大的程序做什么,就是将你的应用程序和小部件包装在一个类中,并将诸如文件名之类的东西存储在类属性中。