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

0 python tkinter button

我是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()
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*lli 6

最好的方法是在类中创建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)
Run Code Online (Sandbox Code Playgroud)

现在,对象ask仍然存在,并且ask.nameNone如果callback尚未执行,它有后的结果askopenfilename.

您可以使用global替代但是这样做确实没有优势,所以我建议您使用这种class方法.

  • @Rinzler,没关系 - OP可能不知道什么是类,也不知道什么是全局,但他或她需要一个或另一个,所以让我们建议更简单和更优秀的一个. (2认同)