每当我打印这个
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"
答案 0 :(得分:2)
输出按执行顺序发生。在您的第一个示例中,变量a
在.35430920L
运行之前被赋予值print a
,并且在文件对话框实际上甚至打开之前按时间顺序发生print
语句,因此在那里打印所选文件的值是不可能的。
在后一种情况下,在回调函数中,结果已知。请注意,您甚至不需要该案例的全局变量。 (您可以删除global a
,除非您需要该功能之外的结果。)
Tkinter使用事件驱动的编程范例,它为每个发生的事件调用回调函数。你想要为任何更大的程序做什么,就是将你的应用程序和小部件包装在一个类中,并将诸如文件名之类的东西存储在类属性中。