2012-05-16 129 views
0

我無法將我的一個文本文件加載到我的GUI中。我有一個加載函數(在菜單欄上),並創建了一個列表框。Python - GUI - Tkinter listboxes

用於加載代碼的菜單和列表框:

class View(Listbox): 
    def __init__(self, master): 
     Listbox.__init__(self, master)  #makes view class listbox 


class Controller(object): 
    def __init__(self, master): 
     """ Main interface: 
     master - the top level window 

     """ 
     self._master = master 
     menubar = Menu(self._master) 

     frame1 = Frame(self._master) 
     frame1.pack(side=TOP, fill=BOTH, padx=5,expand=True) 

     self._Listbox=View(frame1) 
     self._Listbox.pack(side = TOP,fill=BOTH, expand = True,pady=20) 

     menubar = Menu(self._master) 
     filemenu = Menu(menubar, tearoff=0) 
     filemenu.add_command(label="Open rooms file", command = self.file_open) 


    def file_open(self): 
     filename = tkFileDialog.askopenfilename() 

負載文件的工作,但如果是文本文檔被當前加載?我怎樣才能在我的列表框中顯示它?

+0

對不起,我沒有輸入正確。它應該是顯示。由於我正在將文本文件加載到GUI中,我希望文本文件顯示在lixtbox上。 –

回答

3

這工作:

from Tkinter import * 
import tkFileDialog 

class View(Listbox): 
    def __init__(self, master): 
     Listbox.__init__(self, master)  #makes view class listbox 


class Controller(object): 
    def __init__(self, master): 
     """ Main interface: 
     master - the top level window 
     """ 
     self._master = master 

     frame1 = Frame(self._master) 
     frame1.pack(side=TOP, fill=BOTH, padx=5,expand=True) 

     self._Listbox=View(frame1) 
     self._Listbox.pack(side = TOP,fill=BOTH, expand = True,pady=20) 

     menubar = Menu(self._master) 
     filemenu = Menu(menubar, tearoff=0) 
     filemenu.add_command(label="Open", command = self.file_open) 
     menubar.add_cascade(label='File',menu=filemenu) 
     self._master.config(menu=menubar) 

    def file_open(self): 
     filename = tkFileDialog.askopenfilename() 

     #insert each line in the file into the listbox 
     with open(filename,'r') as f: 
      for line in f: 
       self._Listbox.insert(END,line) 



if __name__ == "__main__": 
    root=Tk() 
    c=Controller(root) 
    root.mainloop() 

這只是比你的代碼略有不同。首先,我刪除了第一menubar = Menu(self._master),因爲它沒有做任何事情。二,我加了一個「級聯」menubar.add_cascade(label='File',menu=filemenu),第三,我居然把菜單附在根目錄Tk窗口:self._master.config(menu=menubar)

+0

?對不起,我沒有發佈我的進口產品或我的完整代碼。但是,這就是它的樣子。你可以做到這一點,當你加載一個文本文件,它會顯示它在列表框? –

+0

我不完全明白你想要什麼......列表框*顯示,沒有任何內容。文本文件中有什麼?文本文件的每一行應該是列表框中的新條目嗎?此外,這與您的代碼不完全相同 - 我將編輯以指出區別。 – mgilson

+0

@AnthonyDo:我已編輯指出我的代碼和你的代碼之間的區別 - 我還添加了一個簡單的循環,將文件中的每一行打包到列表框中的不同行中。 – mgilson