2013-11-22 18 views
0

我有一個todoList類,它將顯示爲我的列表框小部件。我可以添加任務,然後在完成後將它們放入完成的框中。但我不明白爲什麼我的恢復按鈕無法正常工作。想知道是否有人可以找出問題。列表框小部件。 Todo List

from Tkinter import * 
import tkFont 

class todoList: 
    def __init__(self): 
     self.todo=[] 
     self.done=[] 

    def addTask(self,task): 
     self.todo.append(task) 

    def completeTask(self,task): 
     if self.todo.count(task)>0: 
      self.todo.remove(task) 
      self.done.append(task) 

    def restoreList(self, file): 
     f=open(file, "r") 
     items=int(f.readline().strip()) 
     for i in range(items): 
      item=f.readline().strip() 
      self.todo.append(item) 
     items= int(f.readline().strip()) 
     for i in range(items): 
      item=f.readline().strip() 
      self.done.append(item) 
     f.close() 



todo=todoList() 


class App: 
    def __init__(self,master): 
     self.todo = todoList() 
     self.master = master 
     self.frame = Frame(master) 
     self.frame.grid() 

     self.addButton = Button(self.frame, text="Add", command=self.add) 
     self.addButton.grid(row=1, column=5) 
     self.saveButton = Button(self.frame, text="Save", command=self.save) 
     self.saveButton.grid(row=0, column=2) 
     self.restoreButton = Button(self.frame, text="Restore", command=self.restore) 
     self.restoreButton.grid(row=0, column=1) 
     self.button = Button(self.frame, text="Quit", command=self.done) 
     self.button.grid(row=0, column=4) 
     self.doneButton = Button(self.frame, text="Done", command=self.done) 
     self.doneButton.grid(row=0, column=3) 

     label1 = Label(self.frame, text="Commands ") 
     label1.grid(row=0, column=0) 

     label = Label(self.frame, text="New Task:") 
     label.grid(row=1, column=0) 
     self.entry = Entry(self.frame) 
     self.entry.grid(row=1, column=1, columnspan=4) 

     frame1 = LabelFrame(self.frame, text="Tasks") 
     frame1.grid(columnspan=7, sticky=E+W) 
     frame1.columnconfigure(0, weight=1) 
     self.tasks = Listbox(frame1) 
     self.tasks.grid(sticky=E+W) 

     frame2 = LabelFrame(self.frame, text="Completed") 
     frame2.grid(columnspan=7, sticky=E+W) 
     frame2.columnconfigure(0, weight=1) 
     self.completed = Listbox(frame2) 
     self.completed.grid(sticky=E+W) 

    def save(self): 
     self.todo.saveList("tasks.txt") 

    def restore(self): 
     self.todo.restoreList("tasks.txt") 
     items = self.todo.getTasks() 
     self.tasks.delete(0,END) 
     for item in items: 
      self.completed.insert(END,item) 
     items = self.todo.getCompleted() 
     self.completed.delete(0,END) 
     for item in items: 
      self.completed.insert(END,item) 

    def add(self): 
     task = self.entry.get() 
     self.todo.addTask(task) 
     self.tasks.insert(END,task) 

    def done(self): 
     selection = self.tasks.curselection() 
     if len(selection) == 0: 
      return 
     task = self.tasks.get(selection[0]) 
     self.todo.completeTask(task) 
     self.tasks.delete(selection[0]) 
     self.completed.insert(END,task) 

    def quit(self): 
     self.frame.quit() 
     self.master.destroy() 


root = Tk() 
app = App(root) 
root.mainloop() 
+1

哪裏是'saveList'方法在'todoList'類? –

+0

你在終端上遇到什麼錯誤? – furas

回答

0

您沒有todoList.save()函數,所以您不需要創建文件。

App.restore()

  1. 你不檢查文件是否存在。

  2. self.todo.restoreList()你叫self.todo.getTasks()哪些不存在。

  3. self.todo.getTasks()之後,你打電話self.todo.getCompleted()不存在。

在終端運行腳本來查看錯誤(引用)

順便說一句:在restore()添加未完成任務列出與完成的任務:)