見出し画像

【初心者向け】ToDoリスト サンプルコード

・業務効率化には何すればいいのかな?
・Pythonで自動化ツールを作成できると聞くけど、具体的に何が作れるの?
・自動化のアイデアが出てこない

こんな悩みを抱えている人に向けて、Pythonで作れる自動化ツールを解説しています。

下記記事で、シンプルなToDoリストの作成方法を解説しました。
 ⇒【初心者向け】Pythonで作れるシンプルな「ToDoリスト」の作成方法を解説!

Pythonの標準ライブラリのみを使用するプログラムのため、初心者でも作成しやすいツールです。

本記事では、シンプルなToDoリストのサンプルコードを公開しています。

自分で作成するのが難しい方や、ツール作成の手間を減らしたい方にお勧めです。ぜひご活用ください。

【関連記事】
【業務効率化】Pythonで作れる自動化ツール具体例・アイデア53選!
【Pythonで業務効率化】自動化ツールを自作する方法を5STEPで解説!



アイデア「ToDoリスト」

概要

日々のタスクを管理するシンプルなToDoリスト

導入メリット

タスクを一目で確認でき、忘れずに処理できます。

ツール機能

タスクの追加、完了、削除が可能なシンプルなToDoリストアプリケーションです。

必要技術

tkinter:グラフィカルユーザーインターフェース(GUI)を作成する

json:タスクデータを保存する

処理フロー

  1. タスクを追加する入力フィールドを表示

  2. 追加されたタスクをリスト表示

  3. タスクの完了時には完了ボタンを押す

  4. 完了したタスクをリストから削除

  5. タスクの保存と読み込み機能

完成イメージ


ToDoリスト

注意事項

著作権について

本ソースコードの著作権は、販売者に帰属します。
修正や改変は自由に行えますが、無断での複製、配布は法律で禁止されています。

ライセンスについて

本ソースコードは、個人利用及び商用利用が可能です。ただし、再販売や、本ソースコードを基にした派生作品の販売は禁止します。

返金について

デジタルコンテンツの性質上、購入後の返品や返金は原則として受け付けておりません。

使用上の免責事項

本ソースコードは予告なく変更や修正を行う場合があります。
本ソースコードの動作を保証するものではありません。
本ソースコードの使用から生じたいかなる直接的または間接的な損害に対しても、販売者は責任を負いません。
動作の不具合については、購入者自身の責任で対処してください。

サポートについて

本ソースコードに関するサポートは行っておりません。バグ報告や質問への対応は致しかねます。


ソースコード

#
# Copyright (c) 2024 Pythonのソバ
# All rights reserved.
#

# 必要なライブラリをインポートします。
import tkinter as tk
from tkinter import messagebox
import json

# ToDoリストアプリケーションのクラスを定義します。
class ToDoApp:
    def __init__(self, root):
        # タスクを保持するリストを初期化します。
        self.tasks = []
        # アプリケーションのルートウィンドウを設定します。
        self.root = root
        self.root.title("ToDoリスト")

        # タスクを表示するためのフレームを作成します。
        self.frame = tk.Frame(self.root)
        self.frame.pack(pady=20)

        # タスクを表示するリストボックスを作成し、フレームに配置します。
        self.listbox = tk.Listbox(self.frame, width=50, height=10)
        self.listbox.pack(side=tk.LEFT, fill=tk.BOTH)

        # リストボックスのためのスクロールバーを作成し、フレームに配置します。
        self.scrollbar = tk.Scrollbar(self.frame, orient=tk.VERTICAL)
        self.scrollbar.pack(side=tk.RIGHT, fill=tk.Y)

        # リストボックスとスクロールバーを連携させます。
        self.listbox.config(yscrollcommand=self.scrollbar.set)
        self.scrollbar.config(command=self.listbox.yview)

        # タスク入力用のフレーム
        self.task_frame = tk.Frame(self.root)
        self.task_frame.pack(pady=(5,0))

        # タスク入力ラベル
        self.label_task = tk.Label(self.task_frame, text="タスク:")
        self.label_task.pack(side=tk.LEFT)

        # タスク入力テキストボックス
        self.entry_task = tk.Entry(self.task_frame, width=35)
        self.entry_task.pack(side=tk.LEFT)

        # タスク入力テキストボックスにエンターキーのバインドを追加
        self.entry_task.bind("<Return>", self.add_task)

        # 納期入力用のフレーム
        self.deadline_frame = tk.Frame(self.root)
        self.deadline_frame.pack(pady=5)

        # 納期入力ラベル
        self.label_deadline = tk.Label(self.deadline_frame, text="納期:")
        self.label_deadline.pack(side=tk.LEFT)

        # 納期入力テキストボックス
        self.entry_deadline = tk.Entry(self.deadline_frame, width=35)
        self.entry_deadline.pack(side=tk.LEFT)

        # 納期入力テキストボックスにもエンターキーのバインドを追加
        self.entry_deadline.bind("<Return>", self.add_task)

        # タスクを追加するボタンを作成し、クリック時の動作を定義します。
        self.add_button = tk.Button(self.root, text="タスクを追加", command=self.add_task)
        self.add_button.pack(pady=5)

        # 選択したタスクを削除するボタンを作成し、クリック時の動作を定義します。
        self.delete_button = tk.Button(self.root, text="選択したタスクを削除", command=self.delete_task)
        self.delete_button.pack(pady=5)

        # 選択したタスクを完了とマークするボタンを作成し、クリック時の動作を定義します。
        self.complete_button = tk.Button(self.root, text="選択したタスクを完了にする", command=self.complete_task)
        self.complete_button.pack(pady=5)

        # 既存のタスクを読み込みます。
        self.load_tasks()

    # タスクを追加するメソッドです。
    def add_task(self, event=None):
        task = self.entry_task.get()  # タスクの内容を入力フィールドから取得します。
        deadline = self.entry_deadline.get()  # 納期を入力フィールドから取得します。
        if task and deadline:  # タスクと納期の両方が入力されていれば、
            # タスクリストに新しいタスクを追加します。
            self.tasks.append({"task": task, "deadline": deadline, "completed": False})
            self.update_listbox()  # リストボックスを更新します。
            self.entry_task.delete(0, tk.END)  # タスク入力フィールドをクリアします。
            self.entry_deadline.delete(0, tk.END)  # 納期入力フィールドをクリアします。
        else:
            messagebox.showwarning("警告", "タスクと納期を入力してください。")  # 入力が不足している場合は警告を表示します。

    # 選択したタスクを削除するメソッドです。
    def delete_task(self):
        try:
            index = self.listbox.curselection()[0]  # 選択されたタスクのインデックスを取得します。
            del self.tasks[index]  # タスクリストから選択されたタスクを削除します。
            self.update_listbox()  # リストボックスを更新します。
        except IndexError:
            messagebox.showwarning("警告", "削除するタスクを選択してください。")  # タスクが選択されていない場合は警告を表示します。

    # 選択したタスクを完了とマークするメソッドです。
    def complete_task(self):
        try:
            index = self.listbox.curselection()[0]  # 選択されたタスクのインデックスを取得します。
            self.tasks[index]["completed"] = True  # タスクを完了とマークします。
            self.update_listbox()  # リストボックスを更新します。
        except IndexError:
            messagebox.showwarning("警告", "完了にするタスクを選択してください。")  # タスクが選択されていない場合は警告を表示します。

    # リストボックスを更新するメソッドです。
    def update_listbox(self):
        self.listbox.delete(0, tk.END)  # リストボックスの内容をクリアします。
        for task in self.tasks:  # タスクリストをループして、
            task_info = f'{task["task"]} [納期: {task["deadline"]}]'  # タスクと納期の情報を組み合わせます。
            if task["completed"]:  # タスクが完了していれば、
                task_info += " [完了]"  # 完了のマークを追加します。
            self.listbox.insert(tk.END, task_info)  # リストボックスにタスク情報を追加します。

    # タスクをファイルから読み込むメソッドです。
    def load_tasks(self):
        try:
            with open("tasks.json", "r") as f:  # タスク保存ファイルを読み込みます。
                self.tasks = json.load(f)  # ファイルの内容をタスクリストに反映します。
                self.update_listbox()  # リストボックスを更新します。
        except FileNotFoundError:
            pass  # ファイルが存在しなければ何もしません。

    def save_tasks(self):
        with open("tasks.json", "w") as f:  # タスク保存ファイルを開きます。
            json.dump(self.tasks, f)  # タスクリストの内容をファイルに書き込みます。
        self.root.destroy()  # タスク保存後にウィンドウを閉じる

if __name__ == "__main__":
    root = tk.Tk()  # メインウィンドウを作成します。
    app = ToDoApp(root)  # ToDoアプリケーションのインスタンスを作成します。
    root.protocol("WM_DELETE_WINDOW", app.save_tasks)  # ウィンドウを閉じるときにタスクを保存します。
    root.mainloop()  # アプリケーションのメインループを開始します。

最後まで読んでいただき、ありがとうございました!
参考のなったと思っていただけたら、
♡スキを押していただけると嬉しいです。

今後もサンプルコードを紹介する予定なので、
関心のある方は是非アカウントのフォローをお願いします!


いいなと思ったら応援しよう!