この記事では、Pythonを勉強している初学者の方に向けて、簡単なToDoリストアプリの作り方を解説します。
未経験者でもPythonでGUIアプリを作れる方法を知っておくと、プログラミングのスキルアップにつながります。解説するコードでは以下の3つのポイントを組み込んでいます。
完成イメージ:
- 既存のタスクリストがJsonファイルから読込みGUI(tkinter)でタスクリストが表示
- 既存タスクは右の「削除」ボタンから削除でき新しいタスクの入力欄から新規タスクを登録
- ウィンドウを閉じると更新されたタスクリストがJsonファイルに保存
作成方針:
このToDoリストアプリケーションは、4つのファイルで構成されています。main.py
はアプリケーションのエントリーポイントであり、task.py
はタスクとタスクマネージャーのクラスを定義しています。ui.py
はユーザーインターフェース(UI)を構築し、タスクの表示と操作を処理します。data.json
はデータベースの役割をしておりタスクリストの保存を行っています。
1.main.py
このファイルはアプリケーションのエントリーポイントです。以下の手順で構成されています:
- JSONファイルからデータを読み込む。
TaskManager
のインスタンスを作成する。- JSONから読み込んだ各タスクデータを使用して
TaskManager
にタスクを追加する。 UIManager
のインスタンスを作成しタスクマネージャーを渡す。- 更新されたタスクデータを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のクラスとモジュールに関する公式ドキュメントをチェックしてみてください。