🎯 نتعلم من هذا الدرس كيف:
- تُنشئ مربع بحث.
- تبحث عن قيمة معينة داخل جدول Treeview.
- تُظهر فقط الصفوف المطابقة للبحث.
✅ مثال عملي: البحث عن موظف بالاسم
✅ الكود الكامل:
import tkinter as tk
from tkinter import ttk
# إنشاء نافذة التطبيق
window = tk.Tk()
window.title("بحث في جدول الموظفين")
window.geometry("700x400")
# ========== بيانات مبدئية ==========
all_employees = [
("أحمد حسن", "محاسب", "المالية"),
("سارة علي", "مبرمجة", "التقنية"),
("ليلى محمد", "مصممة", "التصميم"),
("خالد سمير", "مدير", "الإدارة"),
("منى سالم", "كاتبة", "الموارد البشرية")
]
# ========== جدول Treeview ==========
tree = ttk.Treeview(window, columns=("name", "job", "dept"), show="headings")
tree.heading("name", text="الاسم")
tree.heading("job", text="الوظيفة")
tree.heading("dept", text="القسم")
tree.pack(pady=10, fill="x")
# دالة لعرض كل البيانات
def show_all():
for row in tree.get_children():
tree.delete(row)
for emp in all_employees:
tree.insert("", tk.END, values=emp)
show_all()
# ========== حقل البحث ==========
search_frame = tk.Frame(window)
search_frame.pack(pady=10)
tk.Label(search_frame, text="بحث بالاسم:").pack(side="left")
search_entry = tk.Entry(search_frame)
search_entry.pack(side="left", padx=5)
# ========== زر البحث ==========
def search():
query = search_entry.get().strip().lower()
results = [emp for emp in all_employees if query in emp[0].lower()]
tree.delete(*tree.get_children())
for emp in results:
tree.insert("", tk.END, values=emp)
btn_search = tk.Button(search_frame, text="بحث", command=search)
btn_search.pack(side="left", padx=5)
# ========== زر عرض الكل ==========
btn_reset = tk.Button(search_frame, text="عرض الكل", command=show_all)
btn_reset.pack(side="left")
window.mainloop()
🧠 شرح سريع:
| العنصر | الوظيفة |
|---|---|
tree.delete(*tree.get_children()) |
حذف كل الصفوف من الجدول |
query in emp[0].lower() |
مقارنة الاسم المُدخل بأسماء الموظفين (بحالة غير حساسة) |
Entry + Button |
لتنفيذ عملية البحث |
💡 ملاحظات:
- البحث يتم في العمود الأول (الاسم).
- يمكن تطوير البحث لاحقًا ليشمل باقي الأعمدة.
✅ التمرين: تطبيق للبحث عن الكتب حسب العنوان
🎯 المطلوب:
إنشاء واجهة تعرض جدولًا يحتوي على:
- عنوان الكتاب
- المؤلف
- سنة النشر
ويكون هناك:
- حقل للبحث عن الكتاب حسب العنوان.
- زر للبحث.
- زر آخر لعرض جميع الكتب بعد البحث.
✅ الكود الكامل مع الحل:
import tkinter as tk
from tkinter import ttk
# نافذة التطبيق
window = tk.Tk()
window.title("البحث عن كتاب")
window.geometry("700x400")
# ========== بيانات الكتب ==========
all_books = [
("الخيميائي", "باولو كويلو", "1988"),
("مائة عام من العزلة", "غابرييل غارسيا ماركيز", "1967"),
("1984", "جورج أورويل", "1949"),
("رجال في الشمس", "غسان كنفاني", "1963"),
("شيفرة دافنشي", "دان براون", "2003")
]
# ========== جدول 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, fill="x")
# عرض جميع الكتب في الجدول
def show_all_books():
tree.delete(*tree.get_children())
for book in all_books:
tree.insert("", tk.END, values=book)
show_all_books()
# ========== إطار البحث ==========
search_frame = tk.Frame(window)
search_frame.pack(pady=10)
tk.Label(search_frame, text="ابحث عن عنوان كتاب:").pack(side="left")
entry_search = tk.Entry(search_frame)
entry_search.pack(side="left", padx=5)
# ========== زر البحث ==========
def search_books():
query = entry_search.get().strip().lower()
tree.delete(*tree.get_children())
for book in all_books:
if query in book[0].lower():
tree.insert("", tk.END, values=book)
btn_search = tk.Button(search_frame, text="بحث", command=search_books)
btn_search.pack(side="left", padx=5)
# ========== زر عرض الكل ==========
btn_reset = tk.Button(search_frame, text="عرض الكل", command=show_all_books)
btn_reset.pack(side="left")
# تشغيل التطبيق
window.mainloop()
✅ ماذا ستتعلم من هذا التمرين؟
| المفهوم | الفائدة |
|---|---|
استخدام Entry |
لإدخال كلمة البحث |
فلترة البيانات for book in ... |
لاختيار النتائج المطابقة للعنوان |
tree.delete(*tree.get_children()) |
لحذف النتائج السابقة عند البحث |

