理想的なスケジュール管理ツールを作りたい

Pythonで作る

最初にToDoリストのアプリのプログラミングをコピペ。
このアプリに新たなものを加えていこうとした。
  • スケジュールのタイプによる分類
  • その分類をカラーリング
  • この二つを目指した
    しかし、既存のプログラミングに新しいことを加えることができない。
    調べてもなかなか出てこない


    コードをコピペするべきでないのか

    元々作られていたToDoリストをどうにかして、自分が理想とするものを作ろうとしたが
    コピペだけでは、どのコードがどんな役割を作っているのかが学べない。

    反省として、元からあるアプリを作り直すのではなく
    一部分のコードを組み合わせた方がうまくできると感じた。

    コード

    
            # -*- coding: utf-8 -*-
            import tkinter as tk
            class App:
            def __init__(self):
            # ウィンドウを初期化
            self.master = tk.Tk()
            self.master.title('TODOアプリ')
            self.master.geometry('400x300')
            self.master.configure(padx=16, pady=16)
            # TODO入力エリアを作成
            self.input_area = InputArea(self.master)
            self.input_area.pack(side='top', fill='x')
            self.input_area.click_add_btn = self.click_add_btn
            # TODOリストの表示エリアを作成
            self.list_area = ListArea(self.master)
            self.list_area.pack(side='bottom', expand=True, fill='both')
            def mainloop(self):
            # masterに処理を委譲
            self.master.mainloop()
            def click_add_btn(self):
            """
            入力エリアの追加ボタンが押されたら呼ばれる
            入力エリアの入力値をリストエリアに追加する
            """
            todo = self.input_area.entry.get() # 入力値を取得
            self.input_area.entry.delete(0, 'end') # 入力行に残ったテキストを削除
            self.list_area.listbox.insert('end', todo) # リストにTODOを追加
            class InputArea(tk.Frame):
        """
        TODOの入力エリア
        ユーザーの入力を処理する
        ユーザーが入力したTODOテキストを追加ボタンでリストに追加するのが役割
        """
        def __init__(self, master):
            super(InputArea, self).__init__(master)
            # ハンドル
            self.click_add_btn = None
            # ラベルの作成
            self.label = tk.Label(self, text='TODO')
            self.label.pack(side='left')
            # 入力行の作成
            self.entry = tk.Entry(self)
            self.entry.pack(side='left', expand=True, fill='x')
            # 追加ボタンの作成
            self.add_btn = tk.Button(self, text='追加', command=self._click_add_btn)
            self.add_btn.pack(side='left')
        def _click_add_btn(self):
            if self.click_add_btn:
                self.click_add_btn()
    class ListArea(tk.Frame):
        """
        TODOリストの表示エリア
        ユーザーが入力したTODOが表示される
        """
        def __init__(self, master):
            super(ListArea, self).__init__(master)
            # リストの作成
            self.listbox = tk.Listbox(self, height=5)
            self.listbox.pack(side='top', expand=True, fill='both')
            # 削除ボタンの作成
            self.del_btn = tk.Button(self, text='削除', command=self._click_del_btn ,bg='red')
            self.del_btn.pack(side='bottom', fill='x' )
        def _click_del_btn(self):
            """
            選択中のTODOを削除する
            """
            sel = self.listbox.curselection()
            for i in sel[::-1]:
                self.listbox.delete(i)
    def main():
        app = App()
        app.mainloop()
    if __name__ == '__main__':
        main()