第5回

ソースコード
# -*- 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)
                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()


内容と感想

・今回、12班は、TO DOリストを作成しました。


・過去の課題の中で一番難しかったです。頭が痛くなりました。




参考にしたソースコードはこちら