第六回

・コード
  1. # -*- coding: utf-8 -*-
  2. import tkinter as tk
  3. class App:
  4.     def __init__(self):
  5.         # ウィンドウを初期化
  6.         self.master = tk.Tk()
  7.         self.master.title('TODOアプリ')
  8.         self.master.geometry('400x300')
  9.         self.master.configure(padx=16, pady=16)
  10.         # TODO入力エリアを作成
  11.         self.input_area = InputArea(self.master)
  12.         self.input_area.pack(side='top', fill='x')
  13.         self.input_area.click_add_btn = self.click_add_btn
  14.         # TODOリストの表示エリアを作成
  15.         self.list_area = ListArea(self.master)
  16.         self.list_area.pack(side='bottom', expand=True, fill='both')
  17.     def mainloop(self):
  18.         # masterに処理を委譲
  19.         self.master.mainloop()
  20.     def click_add_btn(self):
  21.         """
  22.         入力エリアの追加ボタンが押されたら呼ばれる
  23.         入力エリアの入力値をリストエリアに追加する
  24.         """
  25.         todo = self.input_area.entry.get() # 入力値を取得
  26.         self.input_area.entry.delete(0, 'end') # 入力行に残ったテキストを削除
  27.         self.list_area.listbox.insert('end', todo) # リストにTODOを追加
  28. class InputArea(tk.Frame):
  29.     """
  30.     TODOの入力エリア
  31.     ユーザーの入力を処理する
  32.     ユーザーが入力したTODOテキストを追加ボタンでリストに追加するのが役割
  33.     """
  34.     def __init__(self, master):
  35.         super(InputArea, self).__init__(master)
  36.         # ハンドル
  37.         self.click_add_btn = None
  38.         # ラベルの作成
  39.         self.label = tk.Label(self, text='TODO')
  40.         self.label.pack(side='left')
  41.         # 入力行の作成
  42.         self.entry = tk.Entry(self)
  43.         self.entry.pack(side='left', expand=True, fill='x')
  44.         # 追加ボタンの作成
  45.         self.add_btn = tk.Button(self, text='追加', command=self._click_add_btn)
  46.         self.add_btn.pack(side='left')
  47.     def _click_add_btn(self):
  48.         if self.click_add_btn:
  49.             self.click_add_btn()
  50. class ListArea(tk.Frame):
  51.     """
  52.     TODOリストの表示エリア
  53.     ユーザーが入力したTODOが表示される
  54.     """
  55.     def __init__(self, master):
  56.         super(ListArea, self).__init__(master)
  57.         # リストの作成
  58.         self.listbox = tk.Listbox(self, height=5)
  59.         self.listbox.pack(side='top', expand=True, fill='both')
  60.         # 削除ボタンの作成
  61.         self.del_btn = tk.Button(self, text='削除', command=self._click_del_btn)
  62.         self.del_btn.pack(side='bottom', fill='x')
  63.     def _click_del_btn(self):
  64.         """
  65.         選択中のTODOを削除する
  66.         """
  67.         sel = self.listbox.curselection()
  68.         for i in sel[::-1]:
  69.             self.listbox.delete(i)
  70. def main():
  71.     app = App()
  72.     app.mainloop()
  73. if __name__ == '__main__':
  74.     main()

内容


・TODOリストを今回は作成した。
・ラベルはTODOで、追加したい内容を入力して追加をクリックするとリストにその内容が乗るようになっている
・グループでの話し合いではTODOリスト、WEBCLASSの通知機能などがあった。
・本当は曜日ごとにまとめられるようにしたかった。参考にできるサイトが見つかり次第やってみたい。

参考にしたサイト


  • コードの参考

  • tkinterの参考

  • コードの差異の確認