我已经使用askopenfilename在类中定义了一个方法来选择文件:
def file(self):
options = {
'defaultextension': '.txt',
'filetypes': [('text files', '.txt')]
}
filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options)
if filename:
directory = os.path.split(filename)[-1]
self.var.set(directory)
我想使用所选文件运行另一种方法来运行快速文本分析。我尝试使用:
text = file.filename
但这给了我错误“'function'对象没有属性'filename'”,即使它是在我的方法中定义的。我想,因为我在一个类中定义了两个东西,它能够识别方法文件()中定义的“filename”。为什么不认识到这一点?
答案 0 :(得分:0)
看起来filename是方法文件()中的局部变量,并没有作为成员变量分配给对象本身?也许你应该改变你的定义:
filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options)
到
self.filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options)
并对方法体的其余部分进行更改。
或者你只需在方法的末尾返回文件名。
这是一个简单的工作示例,我返回文件名(我摆脱了self.var.set部分,我也使用python2,所以我将filedialog更改为tkFileDialog):
import tkFileDialog
import os
class Test(object):
def __init__(self):
print('Initialized')
def file(self):
options = {
'defaultextension': '.txt',
'filetypes': [('text files', '.txt')]
}
filename = tkFileDialog.askopenfilename(title='Choose a file', initialdir="/", **options)
if filename:
directory = os.path.split(filename)[-1]
return filename
newTest = Test()
filename = newTest.file()
print filename