general notes

いろいろなまとめ

Python デスクトップアプリ ToDoリスト

# todo list

# pythonでデスクトップアプリを作ってみる:1日目
# http://kconputing.hatenablog.com/entry/2017/02/27/235055
import tkinter as Tk

class Application(Tk.Frame):
    def __init__(self, master=None):
        Tk.Frame.__init__(self, master)
        self.master.title("Todo List")
        self.master.geometry("400x300")
        
        # 変数初期化
        self.ToDoNumber = 0
        self.ToDo = []
        self.BoolVars = []
        
        # ウィジェットの生成・配置
        self.create_widgets()
        self.pack()
        
    def create_widgets(self):
        #入力フォーム
        self.EditBox = Tk.Entry(self, width=30)
        self.EditBox.grid(row=0, column=0)
        
        Button_Add = Tk.Button(self, text='追加')
        Button_Add.bind('<Button-1>', self.DeleteEntryValue)
        Button_Add.grid(row=0, column=1)
        
        Button_Delete = Tk.Button(self, text='タスクを消去')
        Button_Delete.bind('<Button-1>', self.DeleteTask)
        Button_Delete.grid(row=0, column=2)
        
    def DeleteEntryValue(self, event):
        # EditBoxに書かれている文字列をtxtNewに代入
        txtNew = Tk.StringVar()
        txtNew.set(self.EditBox.get())
        
        # 新たにラベル(ToDoリスト)を作成
        if txtNew.get() == "": return 
        
        val = Tk.BooleanVar()
        val.set(False)
        ToDoNew = Tk.Checkbutton(self, textvariable=txtNew, variable=val)
        
        # 新たに作成したToDoをリストに追加
        self.ToDo.append(ToDoNew)
        self.BoolVars.append(val)
        
        # 新しいラベルをToDoリストの末尾に追加
        self.ToDoNumber += 1      
        ToDoNew.grid(row=self.ToDoNumber, column=0)
        
        # EditBoxに書かれている文字列を消去
        self.EditBox.delete(0, Tk.END)
        
    def DeleteTask(self, event):
        delCnt = 0
        for i in range(self.ToDoNumber):
            j = i - delCnt
            if self.BoolVars[j].get():
                self.ToDo[j].destroy()
                del self.ToDo[j]
                del self.BoolVars[j]
                delCnt += 1
                
        self.ToDoNumber -= delCnt     
        
root = Tk.Tk()
app = Application(master=root)
app.mainloop()