在指定的函数外部使用时,变量的值会发生变化

时间:2014-07-29 10:53:32

标签: python variables tkinter

我创建了一个获取文件目录路径的函数,如下所示:

def discoverLocation(self):
    self.txtBox.insert(1.0, askdirectory())
    if(self.txtBox.get(1.0) != 0):
        global path
        path = self.txtBox.get(1.0,END)
        print "path is "  + path

此函数的输出按预期工作,即输出“path is'文件目录'”

然而,当我从这个函数外部使用这个'path'变量时,变量似乎发生了变化。

这是代码:

def __init__(self, parent):
    path = StringVar()
    print path


    dirs = os.listdir(path)
    for file in dirs:
        totalFiles += 1

此处路径的值与之前的路径不同,它显示的名称为“PY_VAR0”。

我想使用def_init_(self,parent)方法中discoverLocation(self)方法给出的相同值。

2 个答案:

答案 0 :(得分:2)

您似乎错过了类的基本点:它们将信息存储在其实例属性中。您不想创建全局变量,您想要创建实例属性。您可以通过self引用它。

所以,在__init__

def __init__(self, parent):
    self.path = StringVar()

您现在可以在self.path中引用discoverLocation

答案 1 :(得分:1)

你需要做两件事:

  1. discoverLocation返回路径的值,而不是尝试将其设为全局路径,例如:

    class MyClass(object):
        def discoverLocation(self):
            self.txtBox.insert(1.0, askdirectory())
            if(self.txtBox.get(1.0) != 0):
                path = self.txtBox.get(1.0,END)
                print "path is "  + path
                return path
            return None
    
  2. 在主函数中使用该路径,例如:

    def __init__(self, parent):
        path = self.discoverLocation()
        print path
        dirs = os.listdir(path)
        for file in dirs:
           totalFiles += 1
    
  3. 如果找不到路径,您还需要决定该怎么办 - 例如如果discoverLocation()返回None