从askopenfilename打印变量
每当我打印这个
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
输出是按照执行顺序进行的。在你的第一个例子中,变量 a
在 print a
运行之前就被赋值为 .35430920L
,而且从时间上看,print
语句在文件对话框打开之前就已经执行了,因此在这里打印所选文件的值是不可能的。
在后面的例子中,因为是在回调函数里,结果已经是知道的了。注意,在这种情况下你甚至不需要使用全局变量。(你可以去掉 global a
,除非你需要在那个函数外使用这个结果)。
Tkinter 使用的是事件驱动的编程方式,它会为每个发生的事件调用回调函数。对于任何较大的程序,你想要做的就是把你的应用程序和控件放在一个类里,并把文件名这样的东西存储在类的属性中。