Python 变量值在分配给它的函数之外使用时会发生变化
我创建了一个函数,该函数获取文件的目录路径,如下所示:Python 变量值在分配给它的函数之外使用时会发生变化,python,variables,tkinter,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 此函数的输出按预期工作,这意味着输出“路径
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”变量时,该变量似乎发生了变化
代码如下:
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)方法给出的相同值。您需要做两件事:
发现位置
返回path的值,而不是尝试将其设置为全局值,例如:
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
def __init__(self, parent):
path = self.discoverLocation()
print path
dirs = os.listdir(path)
for file in dirs:
totalFiles += 1
您还需要决定如果找不到路径该怎么办-例如,如果
discoverLocation()
返回None
您需要做两件事:
发现位置
返回path的值,而不是尝试将其设置为全局值,例如:
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
def __init__(self, parent):
path = self.discoverLocation()
print path
dirs = os.listdir(path)
for file in dirs:
totalFiles += 1
您还需要决定如果找不到路径该怎么办-例如,如果
discoverLocation()
返回None
您需要做两件事:
发现位置
返回path的值,而不是尝试将其设置为全局值,例如:
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
def __init__(self, parent):
path = self.discoverLocation()
print path
dirs = os.listdir(path)
for file in dirs:
totalFiles += 1
您还需要决定如果找不到路径该怎么办-例如,如果
discoverLocation()
返回None
您需要做两件事:
发现位置
返回path的值,而不是尝试将其设置为全局值,例如:
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
def __init__(self, parent):
path = self.discoverLocation()
print path
dirs = os.listdir(path)
for file in dirs:
totalFiles += 1
您还需要决定如果找不到路径该怎么办-例如,如果
discoverLocation()
返回None
您似乎错过了类的基本要点:它们将信息存储在实例属性中。您不希望创建全局变量,而是希望创建实例属性。您可以通过self
引用它
因此,在\uuuu init\uuuuu
中:
def __init__(self, parent):
self.path = StringVar()
现在您可以在
discoverLocation
中参考self.path
,您似乎忽略了类的基本要点:它们将信息存储在实例属性中。您不希望创建全局变量,而是希望创建实例属性。您可以通过self
引用它
因此,在\uuuu init\uuuuu
中:
def __init__(self, parent):
self.path = StringVar()
现在您可以在
discoverLocation
中参考self.path
,您似乎忽略了类的基本要点:它们将信息存储在实例属性中。您不希望创建全局变量,而是希望创建实例属性。您可以通过self
引用它
因此,在\uuuu init\uuuuu
中:
def __init__(self, parent):
self.path = StringVar()
现在您可以在
discoverLocation
中参考self.path
,您似乎忽略了类的基本要点:它们将信息存储在实例属性中。您不希望创建全局变量,而是希望创建实例属性。您可以通过self
引用它
因此,在\uuuu init\uuuuu
中:
def __init__(self, parent):
self.path = StringVar()
现在,您可以在
discoverLocation
中参考self.path
,在哪里全局定义变量path?我在您分配的init函数path=StringVar()中定义了它。当然,它不会是你之前分配给它的东西;这将是一个StringVar
!另外,您忘了在\uuuu init\uuuuu
中声明它全局
,但是仅仅修复它并不足以修复更大的问题。这两个函数都在同一个类中吗?如果是这样,为什么不将其另存为class属性?是的,它们都在同一个类中,您的意思是在两个函数之外将路径声明为StringVar()?变量path globaly在哪里定义?我在您分配的init function path=StringVar()中定义了它path=StringVar()
。当然,它不会是你之前分配给它的东西;这将是一个StringVar
!另外,您忘了在\uuuu init\uuuuu
中声明它全局
,但是仅仅修复它并不足以修复更大的问题。这两个函数都在同一个类中吗?如果是这样,为什么不将其另存为class属性?是的,它们都在同一个类中,您的意思是在两个函数之外将路径声明为StringVar()?变量path globaly在哪里定义?我在您分配的init function path=StringVar()中定义了它path=StringVar()
。当然,它不会是你之前分配给它的东西;这将是一个StringVar
!另外,您忘了在\uuuu init\uuuuu
中声明它全局
,但是仅仅修复它并不足以修复更大的问题。这两个函数都在同一个类中吗?如果是这样,为什么不将其另存为class属性?是的,它们都在同一个类中,您的意思是在两个函数之外将路径声明为StringVar()?变量path globaly在哪里定义?我在您分配的init function path=StringVar()中定义了它path=StringVar()
。当然,它不会是你之前分配给它的东西;这将是一个StringVar
!另外,您忘了在\uuuu init\uuuuu
中声明它全局
,但是仅仅修复它并不足以修复更大的问题。这两个函数都在同一个类中吗?如果是这样,为什么不将其另存为class属性?是的,它们都在同一个类中,您的意思是将路径声明为两个函数之外的StringVar()?我已经尝试过这样做