الدرس 60 من سلسلة Tkinter، وهو المشروع النهائي ، حيث سنقوم بإنشاء تطبيق إدارة مهام (To-Do List) كامل باستخدام:
- مكتبة Tkinter للواجهة الرسومية
- قاعدة بيانات SQLite لتخزين البيانات
🧩 مشروع تطبيقي شامل – تطبيق إدارة المهام باستخدام Tkinter و SQLite
🎯 وصف المشروع:
تطبيق صغير يسمح لك بـ:
- إضافة مهمة جديدة (Task)
- عرض قائمة المهام الحالية
- حذف مهمة محددة
- تحديث مهمة محددة
- تخزين كل شيء في قاعدة بيانات SQLite
📦 المميزات الأساسية:
| الميزة | الوصف |
|---|---|
| 📋 إضافة مهمة | إدخال نص المهمة في Entry والضغط على "إضافة" |
| 🧾 عرض المهام | عرضها في Listbox |
| 🗑 حذف | حذف المهمة المحددة |
| ✏ تعديل | تعديل مهمة محددة |
| 💾 حفظ تلقائي | يتم الحفظ مباشرة داخل قاعدة بيانات SQLite |
💻 الكود الكامل للمشروع:
import tkinter as tk
from tkinter import messagebox
import sqlite3
# إعداد قاعدة البيانات
conn = sqlite3.connect("tasks.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS tasks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL
)
""")
conn.commit()
# الدوال
def load_tasks():
listbox.delete(0, tk.END)
cursor.execute("SELECT * FROM tasks")
for task in cursor.fetchall():
listbox.insert(tk.END, f"{task[0]} - {task[1]}")
def add_task():
title = entry.get()
if title.strip() != "":
cursor.execute("INSERT INTO tasks (title) VALUES (?)", (title,))
conn.commit()
entry.delete(0, tk.END)
load_tasks()
else:
messagebox.showwarning("تحذير", "لا يمكن إضافة مهمة فارغة")
def delete_task():
selected = listbox.curselection()
if selected:
task_id = int(listbox.get(selected[0]).split(" - ")[0])
cursor.execute("DELETE FROM tasks WHERE id = ?", (task_id,))
conn.commit()
load_tasks()
else:
messagebox.showinfo("تنبيه", "الرجاء تحديد مهمة للحذف")
def update_task():
selected = listbox.curselection()
new_text = entry.get()
if selected and new_text.strip() != "":
task_id = int(listbox.get(selected[0]).split(" - ")[0])
cursor.execute("UPDATE tasks SET title = ? WHERE id = ?", (new_text, task_id))
conn.commit()
load_tasks()
entry.delete(0, tk.END)
else:
messagebox.showwarning("خطأ", "يرجى تحديد مهمة وتعديل النص")
# الواجهة
root = tk.Tk()
root.title("تطبيق إدارة المهام")
tk.Label(root, text="المهمة الجديدة:").pack(pady=5)
entry = tk.Entry(root, width=40)
entry.pack(pady=5)
frame_btns = tk.Frame(root)
frame_btns.pack()
tk.Button(frame_btns, text="➕ إضافة", command=add_task).grid(row=0, column=0, padx=5)
tk.Button(frame_btns, text="🗑 حذف", command=delete_task).grid(row=0, column=1, padx=5)
tk.Button(frame_btns, text="✏ تعديل", command=update_task).grid(row=0, column=2, padx=5)
listbox = tk.Listbox(root, width=50)
listbox.pack(pady=10)
load_tasks()
root.mainloop()
✅ ماذا تعلمت في هذا المشروع؟
- العمل على مشروع حقيقي باستخدام Tkinter
- إنشاء قاعدة بيانات SQLite وربطها بالواجهة
- التحكم في المهام (إضافة، حذف، تعديل)
- استخدام
Listboxبشكل عملي
🎉 تهانينا!
أكملت الآن سلسلة Tkinter كاملة حتى الدرس 60.

