2012-05-16 3 views
0

У меня возникли проблемы с загрузкой одного из моих текстовых файлов в мой графический интерфейс. У меня есть функция загрузки (на панели меню), и я создал список.Python - GUI - Tkinter listboxes

Код для загрузки меню и ListBox:

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

извините, я не набрал его правильно. он должен был отображаться. Поскольку я загружаю текстовый файл в графический интерфейс, я хочу, чтобы текстовый файл отображался в 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