🎯 الهدف من هذا الدرس أن نتعلم كيف:
- تستخدم عنصر Progressbar من مكتبة
ttk. - تحرك شريط التقدم بشكل يدوي أو تلقائي.
- تربط شريط التقدم بحدث مثل تحميل أو معالجة.
✅ مثال عملي: محاكاة تحميل ملف باستخدام Progressbar
✅ الكود الكامل:
import tkinter as tk
from tkinter import ttk
import time
# إنشاء نافذة التطبيق
window = tk.Tk()
window.title("شريط التقدم")
window.geometry("400x200")
# ===== عنوان =====
tk.Label(window, text="تحميل الملف...", font=("Arial", 14)).pack(pady=20)
# ===== شريط التقدم =====
progress = ttk.Progressbar(window, orient="horizontal", length=300, mode="determinate")
progress.pack(pady=10)
# ===== دالة التقدم =====
def start_progress():
progress["value"] = 0
window.update_idletasks()
for i in range(101): # من 0 إلى 100
progress["value"] = i
window.update_idletasks()
time.sleep(0.03) # تأخير لتظهر الحركة
# ===== زر بدء التقدم =====
btn_start = tk.Button(window, text="ابدأ التحميل", command=start_progress)
btn_start.pack(pady=10)
# ===== تشغيل التطبيق =====
window.mainloop()
🧠 شرح سريع:
| العنصر | الوظيفة |
|---|---|
ttk.Progressbar() |
إنشاء شريط تقدم أفقي |
mode="determinate" |
شريط بقيمة محددة (0 إلى 100) |
progress["value"] |
لتحديد مقدار التقدم |
update_idletasks() |
لتحديث الواجهة فورًا أثناء التقدم |
💡 نصائح إضافية:
- يمكنك استخدام
indeterminateلإظهار شريط تقدم غير محدد (يتموج باستمرار). - يمكن ربط الشريط بتحميل ملفات أو عمليات حسابية.
✅ التمرين: "عداد تحميل بيانات"
🎯 المطلوب:
أن تنشئ تطبيقًا يحتوي على:
- شريط تقدم (Progressbar).
- زر بعنوان "تحميل البيانات".
- عند الضغط على الزر، يبدأ شريط التقدم بالتحرك تدريجيًا إلى 100%.
✅ الكود الكامل مع الحل:
import tkinter as tk
from tkinter import ttk
import time
# إنشاء نافذة التطبيق
window = tk.Tk()
window.title("تحميل البيانات")
window.geometry("400x200")
# عنوان
label = tk.Label(window, text="جارٍ تحميل البيانات...", font=("Arial", 12))
label.pack(pady=20)
# شريط التقدم
progress = ttk.Progressbar(window, orient="horizontal", length=300, mode="determinate")
progress.pack(pady=10)
# دالة لتحريك شريط التقدم
def simulate_loading():
progress["value"] = 0
window.update_idletasks()
for i in range(101): # من 0 إلى 100
progress["value"] = i
window.update_idletasks()
time.sleep(0.02) # تأخير 0.02 ثانية لمحاكاة التحميل
label.config(text="تم تحميل البيانات بنجاح!")
# زر تحميل البيانات
btn = tk.Button(window, text="تحميل البيانات", command=simulate_loading)
btn.pack(pady=10)
# تشغيل التطبيق
window.mainloop()
✅ ماذا ستتعلم من هذا التمرين؟
| المهارة | التطبيق |
|---|---|
استخدام ttk.Progressbar |
لعرض تقدم العملية |
التحكم في القيمة value |
لزيادة التقدم بشكل يدوي |
time.sleep() و update_idletasks() |
لمحاكاة تأخير وتحريك الشريط |
| تغيير النص عند الانتهاء | باستخدام label.config() لتحديث المحتوى |
💡 أفكار تطوير لاحقًا:
- ربط شريط التقدم بعملية حقيقية مثل قراءة ملف كبير.
- استخدام
threadingلمنع تجميد الواجهة أثناء التحميل.

