列表框小部件。待办事项清单

时间:2013-11-22 01:50:36

标签: python widget tkinter

我有一个todoList类,它将作为我的列表框小部件出现。我可以添加任务,然后在完成后将它们放在完成的框中。但我不明白为什么我的恢复按钮不能正常工作。想知道是否有人能解决问题。

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 个答案:

答案 0 :(得分:0)

您没有todoList.save()功能,因此您无法创建文件。

App.restore()

  1. 您不检查文件是否存在。

  2. {li>

    self.todo.restoreList()之后您拨打self.todo.getTasks()不存在。

  3. self.todo.getTasks()之后,您拨打的self.todo.getCompleted()不存在。

  4. 在终端中运行脚本以查看错误(引用)

    顺便说一句:在restore()中,您将未完成的任务添加到已完成任务的列表中:)