🎯 الهدف أن تتعلم كيف:
- تختار صفًا من جدول
Treeview. - تعبّئ بياناته في خانات الإدخال.
- تُعدّل تلك البيانات وتُحدث الجدول.
✅ مثال عملي: تعديل بيانات موظف في جدول
✅ الكود الكامل:
import tkinter as tk
from tkinter import ttk
# إنشاء النافذة
window = tk.Tk()
window.title("تعديل بيانات الموظف")
window.geometry("700x400")
# ========== جدول Treeview ==========
tree = ttk.Treeview(window, columns=("name", "role", "dept"), show="headings")
tree.heading("name", text="الاسم")
tree.heading("role", text="الوظيفة")
tree.heading("dept", text="القسم")
tree.pack(pady=10)
# بيانات مبدئية
employees = [
("أحمد سالم", "محاسب", "المالية"),
("ليلى حسين", "مبرمجة", "التقنية"),
("سامي علي", "مدير", "الإدارة")
]
for emp in employees:
tree.insert("", tk.END, values=emp)
# ========== خانات الإدخال ==========
frame = tk.Frame(window)
frame.pack(pady=10)
tk.Label(frame, text="الاسم:").grid(row=0, column=0)
entry_name = tk.Entry(frame)
entry_name.grid(row=0, column=1)
tk.Label(frame, text="الوظيفة:").grid(row=0, column=2)
entry_role = tk.Entry(frame)
entry_role.grid(row=0, column=3)
tk.Label(frame, text="القسم:").grid(row=0, column=4)
entry_dept = tk.Entry(frame)
entry_dept.grid(row=0, column=5)
# ========== تعبئة البيانات عند التحديد ==========
def fill_entries(event):
selected = tree.selection()
if selected:
values = tree.item(selected)["values"]
entry_name.delete(0, tk.END)
entry_role.delete(0, tk.END)
entry_dept.delete(0, tk.END)
entry_name.insert(0, values[0])
entry_role.insert(0, values[1])
entry_dept.insert(0, values[2])
tree.bind("<<TreeviewSelect>>", fill_entries)
# ========== زر تعديل البيانات ==========
def update_employee():
selected = tree.selection()
if selected:
tree.item(selected, values=(
entry_name.get(),
entry_role.get(),
entry_dept.get()
))
btn_update = tk.Button(window, text="تحديث البيانات", command=update_employee)
btn_update.pack(pady=10)
window.mainloop()
🧠 ما ستتعلمه من هذا الدرس:
| العنصر | الوظيفة |
|---|---|
tree.item(item, values=…) |
لتحديث بيانات الصف المحدد في الجدول. |
bind("<<TreeviewSelect>>") |
تنفيذ حدث عند اختيار صف من الجدول. |
Entry.insert() |
تعبئة البيانات داخل خانات الإدخال. |
📝 ملاحظات:
- يمكنك الآن تعديل أي صف من خلال تحديده، تعديل البيانات، ثم الضغط على زر "تحديث البيانات".
- لاحقًا يمكنك إضافة تحقق من صحة البيانات أو رسائل تأكيد.
✅ التمرين: إدارة قائمة كتب وتعديل بيانات الكتاب المحدد
🎯 المطلوب:
إنشاء واجهة تعرض جدولًا للكتب يحتوي على:
- عنوان الكتاب
- اسم المؤلف
- سنة النشر
مع خانات إدخال لعرض بيانات الكتاب المحدد، وتعديلها عند الضغط على زر "تحديث".
✅ الكود الكامل (مع الحل):
import tkinter as tk
from tkinter import ttk
# نافذة التطبيق
window = tk.Tk()
window.title("إدارة الكتب")
window.geometry("700x400")
# ========== جدول Treeview ==========
tree = ttk.Treeview(window, columns=("title", "author", "year"), show="headings")
tree.heading("title", text="عنوان الكتاب")
tree.heading("author", text="المؤلف")
tree.heading("year", text="سنة النشر")
tree.pack(pady=10)
# بيانات مبدئية
books = [
("الخيميائي", "باولو كويلو", "1988"),
("رجال في الشمس", "غسان كنفاني", "1963"),
("1984", "جورج أورويل", "1949")
]
for book in books:
tree.insert("", tk.END, values=book)
# ========== خانات الإدخال ==========
frame = tk.Frame(window)
frame.pack(pady=10)
tk.Label(frame, text="عنوان الكتاب:").grid(row=0, column=0)
entry_title = tk.Entry(frame)
entry_title.grid(row=0, column=1)
tk.Label(frame, text="المؤلف:").grid(row=0, column=2)
entry_author = tk.Entry(frame)
entry_author.grid(row=0, column=3)
tk.Label(frame, text="سنة النشر:").grid(row=0, column=4)
entry_year = tk.Entry(frame)
entry_year.grid(row=0, column=5)
# ========== تعبئة الحقول عند التحديد ==========
def fill_entries(event):
selected = tree.selection()
if selected:
values = tree.item(selected)["values"]
entry_title.delete(0, tk.END)
entry_author.delete(0, tk.END)
entry_year.delete(0, tk.END)
entry_title.insert(0, values[0])
entry_author.insert(0, values[1])
entry_year.insert(0, values[2])
tree.bind("<<TreeviewSelect>>", fill_entries)
# ========== تحديث بيانات الكتاب ==========
def update_book():
selected = tree.selection()
if selected:
tree.item(selected, values=(
entry_title.get(),
entry_author.get(),
entry_year.get()
))
btn_update = tk.Button(window, text="تحديث بيانات الكتاب", command=update_book)
btn_update.pack(pady=10)
window.mainloop()
✅ ماذا ستتعلم من التمرين؟
| المهارة | التطبيق |
|---|---|
| عرض بيانات في جدول Treeview | باستخدام .insert() |
| تعديل البيانات | باستخدام .item(..., values=...) |
| تفعيل حدث عند اختيار صف | باستخدام bind("<<TreeviewSelect>>") |
💡 أفكار تطويرية لاحقًا:
- إضافة زر لحذف كتاب.
- إدخال كتاب جديد.
- البحث عن كتاب في الجدول.

