TkInter:如何从回调函数按钮调用变量?

时间:2015-03-18 20:28:27

标签: python button tkinter

我是Tkinter的绝对初学者,我需要帮助: 我想用一个按钮打开一个文件。我到处都找到了这个非常简单的例子:

from Tkinter import *
from tkFileDialog   import askopenfilename      

def callback():
    name= askopenfilename() 
    print name

errmsg = 'Error!'
Button(text='File Open', command=callback).pack(fill=X)
mainloop()

但是如何从函数回调中调用变量“name”?我在这个函数之外需要这个变量!当然,我也可以在回调函数中打开文件,但我需要打开的文件将内容保存在数组中并使用数组...

2 个答案:

答案 0 :(得分:5)

最好的方法是在中使callback成为方法

class Asker(object):
    def __init__(self):
        self.name = None
    def callback(self):
        self.name = askopenfilename() 
        print self.name

ask = Asker()
Button(text='File Open', command=ask.callback).pack(fill=X)

现在,对象ask仍然存在,如果ask.name尚未执行,则Nonecallback,之后askopenfilename的结果为global

您可以使用class,但这样做确实没有优势,所以我建议您使用这种基于{{1}}的方法。

答案 1 :(得分:0)

如果你需要一个函数外的变量,你需要一个全局变量

name="" # if you don't call the function it'll remain empty!
def callback():
    global name
    name= askopenfilename() 
    print name