【发布时间】:2016-03-01 13:32:46
【问题描述】:
我是 python 初学者,所以请耐心等待。我在 GUI 上编写了一些代码,允许用户使用一个按钮 (browse_inputfile) 选择文件,然后显示文件路径,然后用户可以单击另一个按钮对该文件运行转换 (run_conversion)。
但是,为了做到这一点,我必须定义一个全局变量,以使打开的文件能够从一个函数传递到另一个函数。有一个更好的方法吗?我尝试传递路径并在第二个函数中实际打开它,但这会产生“找不到文件”错误,我认为是由于字符串路径中使用了“\”。
这是我的代码:
def browse_inputfile(self):
global inputfile
inputfile = open(QtGui.QFileDialog.getOpenFileName(self, "Open Data File", "", "txt files (*.txt)"),'r+')`
然后有一些代码使用“inputfile.name”显示路径。
第二个函数是这样的:
def run_conversion(self):
global inputfile
if inputfile: # if user didn't pick a file don't continue
#do stuff
inputfile.close()
我知道使用全局变量不是一个好习惯,那么我怎样才能将打开的文件从一个函数传递到另一个函数并让用户在文件上运行“东西”之前单击第二个按钮?
我希望他们能够在对其进行“处理”之前检查它是否是正确的文件。
谢谢
【问题讨论】:
-
约定是使用全局变量不是好的做法。我觉得这种说法不合理,只是因为有时你只需要使用它们。特别是在您想在函数之间传递文件名的情况下。全局变量的问题在于它们可能相当危险,因为它们会与重复的变量名混淆。祝你好运!在我看来你很好:)
-
谢谢达米安。我想知道是否可能是这种情况。但是,可能有一种方法可以传递路径(作为返回?然后在第二个函数中定义变量)a 但是当我尝试不将其设为全局变量但我不知道时,我无法使其工作许多内置的python函数,所以我可能错过了一些东西。
-
是的,您可以在函数中传递它,但这只会造成比实际价值更多的混乱。只是为了方便而坚持你所拥有的。
-
browse_inputfile()和run_conversion()在同一个班级? -
是的,他们在同一个班级。
标签: python function file file-handling