【初心者向け】PythonでToDoリストを簡単に作ってみた(tkinter)

【初心者向け】PythonでTodoリストを簡単に作ってみた(tkinter) プログラミング


この記事では、Pythonを勉強している初学者の方に向けて、簡単なToDoリストアプリの作り方を解説します。

未経験者でもPythonでGUIアプリを作れる方法を知っておくと、プログラミングのスキルアップにつながります。解説するコードでは以下の3つのポイントを組み込んでいます。

  1. ToDoリストアプリの構成: main.pytask.pyui.pydata.jsonの4つのファイルからなる構成を解説します。各ファイルの役割や連携方法を解説します
  2. Pythonでのデータ操作: JSONファイルからデータを読み込み、タスクを追加・削除する方法を解説します。
  3. Tkinterを使ったGUIアプリの作成: Tkinterを使用してウィンドウを作成し、タスクリストを表示・操作する方法を説明します。

完成イメージ:

  • 既存のタスクリストがJsonファイルから読込みGUI(tkinter)でタスクリストが表示
  • 既存タスクは右の「削除」ボタンから削除でき新しいタスクの入力欄から新規タスクを登録
  • ウィンドウを閉じると更新されたタスクリストがJsonファイルに保存

作成方針:

このToDoリストアプリケーションは、4つのファイルで構成されています。main.pyはアプリケーションのエントリーポイントであり、task.pyはタスクとタスクマネージャーのクラスを定義しています。
ui.pyはユーザーインターフェース(UI)を構築し、タスクの表示と操作を処理します。data.jsonはデータベースの役割をしておりタスクリストの保存を行っています。

ファイル構成

C:.todoList
 | main.py:メイン処理
 | task.py:タスク、タスクリスト制御クラス
 | ui.py:GUI制御クラス
 | data.json:タスクリストのデータ保管

1.main.py

このファイルはアプリケーションのエントリーポイントです。以下の手順で構成されています:

  1. JSONファイルからデータを読み込む。
  2. TaskManagerのインスタンスを作成する。
  3. JSONから読み込んだ各タスクデータを使用してTaskManagerにタスクを追加する。
  4. UIManagerのインスタンスを作成しタスクマネージャーを渡す。
  5. 更新されたタスクデータをJSONファイルに書き込む。
import json
from task import TaskManager
from ui import UIManager

# ファイルの読み込み
with open("temp/todoList/data.json", mode='r') as json_file:
    data = json.load(json_file)

task_manager = TaskManager()
for task_data in data:
    task_manager.add_task(task_data)

ui = UIManager(task_manager)

# ファイルの書き込み
with open("temp/todoList/data.json", mode='w',encoding="utf-8") as json_file:
    updated_data=[]
    for task in task_manager.tasks:
        if not task.deleted:
            updated_data.append({
            "time": task.time,
            "title": task.title,
            "content":task.content
        })
    json.dump(updated_data,json_file,indent=4,ensure_ascii=False)

2.task.py

このファイルには、タスクとタスクマネージャーのクラスが定義されています。

  • Taskクラスは個々のタスクを表します。__init__メソッドでタスクデータを受け取り、インスタンス変数に格納します。また、mark_as_deletedメソッドでタスクを削除済みとしてマークします。
  • TaskManagerクラスはタスクの追加と削除を管理します。__init__メソッドではタスクリストを初期化し、add_taskメソッドで新しいタスクを追加し、delete_taskメソッドで指定されたタスクを削除します。
class Task:
    def __init__(self, task_data):
        # タスクの初期化
        self.deleted = False
        self.time = task_data["time"]
        self.title = task_data["title"]
        self.content = task_data["content"]

    def mark_as_deleted(self):
        # タスクを削除済みとしてマーク
        self.deleted = True

class TaskManager:
    def __init__(self):
        # タスクリストの初期化
        self.tasks = []

    def add_task(self, task_data):
        # 新しいタスクをタスクリストに追加
        new_task = Task(task_data)
        self.tasks.append(new_task)

    def delete_task(self, task):
        # 指定されたタスクを削除
        task.mark_as_deleted()

3.ui.py

このファイルは、Tkinterを使用してGUIを構築し、タスクの表示と操作を処理します。

  • UIManagerクラスはGUIの構築と更新を行います。
  • __init__メソッドではTkinterウィンドウを初期化し、タスクの表示を更新します。
  • update_task_displayメソッドは、タスクの表示を更新します。
  • add_taskメソッドは新しいタスクを追加し、delete_taskメソッドは指定されたタスクを削除します。これらのメソッドはいずれもタスクマネージャーを介してタスクを操作します。

それでは、各ファイルのコードをもう少し詳細に解説していきたいと思います。

import tkinter as tk
from datetime import datetime

class UIManager:
    def __init__(self, task_manager):
        # UIの初期化と更新タスクの表示
        self.task_manager = task_manager

        self.window = tk.Tk()
        self.window.title("ToDo リスト")
        self.window.config(padx=30, pady=30)

        self.update_task_display()

        self.window.mainloop()

    def update_task_display(self):
        # タスクの表示を更新
        for widget in self.window.winfo_children():
            widget.destroy()

        # タスク一覧のヘッダー
        tk.Label(text="タスク一覧").grid(row=0, column=0, columnspan=3)
        tk.Label(text="作成日時").grid(row=1, column=0)
        tk.Label(text="タイトル").grid(row=1, column=1)
        tk.Label(text="内容").grid(row=1, column=2)

        # タスクの表示と削除ボタンの配置
        for i, task in enumerate(self.task_manager.tasks):
            if not task.deleted:
                tk.Label(text=task.time).grid(row=i+2, column=0)
                tk.Label(text=task.title).grid(row=i+2, column=1)
                tk.Label(text=task.content).grid(row=i+2, column=2)
                tk.Button(text="削除", command=lambda t=task: self.delete_task(t)).grid(row=i+2, column=3)

        # 追加ボタンとテキストボックスの表示
        tk.Label(text="新しいタスク").grid(row=len(self.task_manager.tasks) + 2, column=0, columnspan=3)
        tk.Label(text="タイトル").grid(row=len(self.task_manager.tasks) + 3, column=0)
        tk.Label(text="内容").grid(row=len(self.task_manager.tasks) + 3, column=1, columnspan=3)
        self.task_title_entry = tk.Entry()
        self.task_title_entry.grid(row=len(self.task_manager.tasks) + 4, column=0)
        self.task_content_entry = tk.Entry()
        self.task_content_entry.grid(row=len(self.task_manager.tasks) + 4, column=1,columnspan=2)
        tk.Button(text="追加", command=self.add_task).grid(row=len(self.task_manager.tasks) + 4, column=3)

    def add_task(self):
        # 新しいタスクを追加して表示を更新
        title = self.task_title_entry.get()
        content = self.task_content_entry.get()
        time = datetime.now().strftime("%Y/%m/%d %H:%M:%S")
        new_task_data = {"time": time, "title": title, "content": content}
        self.task_manager.add_task(new_task_data)
        self.update_task_display()

    def delete_task(self, task):
        # タスクを削除して表示を更新
        self.task_manager.delete_task(task)
        self.update_task_display()

4.data.json

このファイルはGUIで操作したタスクリストのデータを管理するファイルです。

  • 入力日時、タイトル、コンテンツの情報を管理しています
  • GUIを開くとJSONファイルが読み込まれ、閉じると捜査結果がJSONに更新して保存されます
[
    {
        "time": "2024/05/26 12:23:51",
        "title": "食料品の買い物",
        "content": "卵、牛乳、野菜を買ってくる。"
    },
    {
        "time": "2024/05/26 12:24:05",
        "title": "ジムへ行く",
        "content": "トレーニングをして体力を鍛える。"
    },
    {
        "time": "2024/05/26 12:27:50",
        "title": "プロジェクトの報告書作成",
        "content": "データの分析と結果のまとめを行う。"
    },
    {
        "time": "2024/05/26 12:28:02",
        "title": "映画鑑賞",
        "content": "新しい映画を見に映画館に行く。"
    },
    {
        "time": "2024/05/26 12:28:14",
        "title": "掃除",
        "content": "家の掃除をして部屋を片付ける。"
    }
]

まとめ

この記事では、Pythonを勉強している初学者の方に向けてToDoリストアプリケーションの作成方法について解説しました。

要点をまとめると以下の通りです。

  • ToDoリストアプリケーションは、4つのファイルで構成されます。main.py、task.py、ui.py、data.json。
  • main.pyはアプリケーションのエントリーポイントであり、JSONファイルからデータを読み込んでタスクを表示し、更新されたデータをJSONファイルに書き込みます。
  • task.pyでは、TaskクラスとTaskManagerクラスが定義されており、それぞれ個々のタスクを管理します。

Pythonの初学者にとって、クラスとモジュールの理解が重要なポイントとなります。Pythonを使ってアプリケーションを作成する際は、まず基本的な概念であるクラスとモジュールをしっかり押さえて、自分なりのアプリを作ってみましょう。さらに詳しく知りたい方は、Pythonのクラスとモジュールに関する公式ドキュメントをチェックしてみてください。

タイトルとURLをコピーしました