2015-05-27 109 views
0

當我將主函數和gui代碼結合在一起時,我很難使用文件處理。我對OOP和GUI都很陌生(TKinter)。我想讓我的程序有一個按鈕並打開一個文件。然後這個文件將被用在main()函數中,然後它完成要執行的任務。下面是代碼的一部分:Gui中的文件處理

class GuiFrame1(Frame): 
    def __init__ (self): 
    Frame.__init__(self) 
    self.master.geometry("500x500") 
    self.pack(expand = 1, fill = BOTH) 

    self.FileOpenerButton = Button(self,\ 
     text = "Open File", command = self.OpenFile) 
    self.FileOpenerButton.pack() 

    def OpenFile(self): 
    inputFile = tkFileDialog.askopenfile() 
    inputFile.close() 

def main(): 
    with open ("LotData1.txt", "r") as fp: 
    sideList = [] 
    for i in fp: 
     tmp = i.strip().split() 
     sideList.append([tmp[0], tmp[1], float(tmp[2])]) 

因此,它是像我想與開放(「LotData1.txt」,「R」)作爲FP刪除並應使用的文件,我選與桂。這是完整的代碼,如果有人感興趣。 http://pastebin.com/PGdXk8Bx

我之所以使用open函數是因爲我試圖查看我的main()函數是否工作,以及它是否計算輸出所需的東西,然後我試圖用TKinter實現它。

+0

你正在使用哪個版本的python? – Henrik

+0

嗨,我正在使用Python 2.7。 – Garander

+0

目前尚不清楚你想要什麼。你想讓你的課得到一個文件_name_,或者你想讓它打開文件並將文件_handle_傳遞給主函數(或其他函數)? –

回答

0

askopenfilename返回文件的路徑。所以我不知道你爲什麼使用密切的手柄?有錯誤嗎?

def OpenFile(self): 
    inputFile = tkFileDialog.askopenfile() 
    main(inputFile) 

def main(Filename): 
    with open (Filename, "r") as fp: 

您可以使用類

+0

'askopenfilename'返回一個文件名,但他們沒有調用'askopenfilename'。 OP正在調用'askopenfile',它返回一個文件句柄。 –

+0

抱歉沒有看到,使用'inputFile'它是'fp',並且您可以刪除'with open' – user2740652

1

回答你的具體問題有關訪問一個類的方法打開的文件名是A)使用getopenfilename而不是getopenfile,和b)保存文件名作爲屬性的類:

def OpenFile(self): 
    self.inputFile = tkFileDialog.askopenfilename() 

就這樣,在你的代碼其他地方,你可以使用self.inputFile當您需要的文件名。

-2

答案蟒蛇2.7

OOP 課1

有一類與對象之間有很大的區別。 我能想到的最好的比喻是,班級是蛋糕的食譜。該對象是一個蛋糕。

對象和蛋糕

蛋糕類比的邏輯成立的話,只要你可以有對象的多個實例建立一個使用類。 (多個蛋糕,都是由同一配方製成的)

就像對象一樣,蛋糕在創建後並不是完全相同的。 (有人吃了我的蛋糕,但避免了你的蛋糕,所以蛋糕是不同的)。

基類繼承(或使用標準配方) 說你想烤藍莓鬆餅。你挖掘到你的書,並請參閱如下書面配方:

mix together the standard muffin recipe on page 301, but leave out the icing. 
Add 100 blueberrys 

這意味着,一個基本的鬆餅食譜存在,筆者是懶得寫所有常見的東西的兩倍。

定義類時,「基類」就是這樣。這是標準鬆餅配方的定義。您可以通過繼承基類來創建自己的版本。

OOP 課2

The cake is a lie,至少對於Python編程。 我們談論類從對象繼承.. SO Question on that

所以,請不要嘗試通過Python入門學習「面向對象」,因爲Python的方式是..好pythonic

GUI

的圖形用戶界面GUI就是這樣。沒有其他,沒有別的。 存在許多框架,TKinter就是其中之一,QT是另一個,而Visual 語言是第三個,其中最後一個是微軟的東西,而不是python友好的。

Tkinter是... 特別我不會推薦它的人試圖學習如何創建GUI的。這就是說,它可以是相當靈活的,並與Python發貨,所以它可用在某些情況下,並有權在那裏..

乾草不生我的氣,我愛Tkinter,但我瞭解到大多數人會贊成我以前的評論。

代碼的具體問題與

你怎麼打算跑什麼? 您正在定義一個類和一個名爲「main」的函數,但這不是「C」,所以main從未實際運行...

您打算如何啓動GUI,我只能看到代碼修改一個圖形用戶界面,通過包裝在一些東西...

該程序應該做什麼? 這聽起來像你不想實際導入文件中的文本作爲Python代碼,並運行它?

+1

我認爲_'don't不要通過學習python來學習「OOP」_是可怕的建議。 Python是學習OOP的好語言。我也認爲_「我不會推薦給那些試圖學習如何創建GUI的人」_是特別可怕的建議。 Tkinter是學習GUI的絕對方法。開銷很小,它提供了所有GUI工具包的大部分基本功能。開始使用tkinter非常簡單,您可以從中學到很多東西。 –

+0

我一直在教它..我發現它更容易學習的孩子們C#或Java第一..因此,我非常個人的評論 – Henrik