2016-11-02 51 views
0

使用選定的文件,我定義的方法使用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 

但是這給我的錯誤「‘功能’對象有沒有屬性‘名’」,即使它是在我的方法定義。我認爲,因爲我在一個類中定義了兩個可以識別方法文件()中定義的「文件名」的東西。爲什麼它不承認這一點?

+0

「文件名」是一個方法內的局部變量;它在方法返回的那一刻就不復存在了。使用'self.filename'將值存儲在類實例中,以便稍後參考。 – jasonharper

+0

...或返回文件名變量 – Tryph

回答

0

似乎文件名是方法文件()中的局部變量,並沒有作爲成員變量分配給對象本身?也許你應該改變你的定義:

filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options) 

self.filename = filedialog.askopenfilename(title='Choose a file', initialdir="/", **options) 

並使這些改變你的方法體的其餘部分。

或者,您可以簡單地在方法結尾處返回文件名。

這裏有一個簡單的工作示例,我返回文件名(我擺脫了self.var.set部分的,所以我改變了對FileDialog的我tkFileDialog也正在使用python2):

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 
+0

謝謝你的回答。這似乎是一個明顯的問題,但我嘗試了你的兩個建議,不幸的是我仍然得到錯誤「'文件名'未定義」或「功能沒有屬性'文件名'」。此外,出於某種原因當我嘗試使用「self.filename」時,它給了我錯誤:「name'self'未定義」,因爲某些原因,即使我想在我的類中定義「文本」。 –

+0

我更新了上面的答案以幫助出。 –

相關問題