في الدروس السابقة، تعلمنا كيف ننشئ قائمة Menu بسيطة. في هذا الدرس، سنتعلم كيف نضيف قوائم فرعية (Submenus) داخل القائمة الرئيسية.
✅ ما هي القائمة الفرعية (Submenu)؟
القائمة الفرعية هي قائمة تظهر عندما تضع مؤشر الماوس فوق عنصر معين داخل القائمة الأساسية، وتحتوي على خيارات إضافية متفرعة منه.
📌 مثال عملي:
import tkinter as tk
# إنشاء نافذة
root = tk.Tk()
root.title("قائمة فرعية في Tkinter")
root.geometry("300x200")
# إنشاء القائمة الرئيسية
main_menu = tk.Menu(root)
root.config(menu=main_menu)
# قائمة رئيسية باسم "الملف"
file_menu = tk.Menu(main_menu, tearoff=0)
main_menu.add_cascade(label="الملف", menu=file_menu)
# عناصر داخل القائمة "الملف"
file_menu.add_command(label="جديد")
file_menu.add_command(label="فتح")
# قائمة فرعية داخل "الملف"
export_submenu = tk.Menu(file_menu, tearoff=0)
export_submenu.add_command(label="PDF")
export_submenu.add_command(label="Word")
export_submenu.add_command(label="Excel")
# ربط القائمة الفرعية بـ "تصدير"
file_menu.add_cascade(label="تصدير", menu=export_submenu)
# عنصر خروج
file_menu.add_separator()
file_menu.add_command(label="خروج", command=root.quit)
root.mainloop()
🧠 شرح الكود:
add_cascade: تُستخدم لإضافة عنصر رئيسي إلى القائمة.tearoff=0: يعطل إمكانية فصل القائمة عن النافذة.export_submenu: قائمة فرعية مرتبطة بالقائمة الأساسية "الملف".add_separator: لإضافة فاصل بين عناصر القائمة.
🧩 النتيجة:
ستظهر قائمة "الملف" في الأعلى، وبداخلها:
- "جديد"
- "فتح"
- "تصدير" → تحتوي على قائمة فرعية: PDF, Word, Excel
- "خروج"
✅ التمرين:
أنشئ نافذة تحتوي على قائمة باسم "الأدوات"، وهذه القائمة يجب أن تحتوي على قائمة فرعية باسم "تحويل"، وهذه القائمة الفرعية تحتوي على:
- "تحويل إلى PDF"
- "تحويل إلى صورة"
- "تحويل إلى نص"
وعند الضغط على أي عنصر من القائمة الفرعية، يجب طباعة رسالة في وحدة الإخراج (Console) توضح العملية المطلوبة، مثل:
تم اختيار: تحويل إلى PDF
💡 الحل:
import tkinter as tk
# دالة لطباعة الرسائل
def show_message(option):
print(f"تم اختيار: {option}")
# إنشاء النافذة
root = tk.Tk()
root.title("قائمة فرعية - تمرين")
root.geometry("300x200")
# القائمة الرئيسية
main_menu = tk.Menu(root)
root.config(menu=main_menu)
# قائمة الأدوات
tools_menu = tk.Menu(main_menu, tearoff=0)
main_menu.add_cascade(label="الأدوات", menu=tools_menu)
# قائمة فرعية للتحويل
convert_submenu = tk.Menu(tools_menu, tearoff=0)
convert_submenu.add_command(label="تحويل إلى PDF", command=lambda: show_message("تحويل إلى PDF"))
convert_submenu.add_command(label="تحويل إلى صورة", command=lambda: show_message("تحويل إلى صورة"))
convert_submenu.add_command(label="تحويل إلى نص", command=lambda: show_message("تحويل إلى نص"))
# ربط القائمة الفرعية مع الأدوات
tools_menu.add_cascade(label="تحويل", menu=convert_submenu)
root.mainloop()
✨ ملاحظات:
- استخدمنا
lambdaلتمرير قيمة مختلفة لكل زر في القائمة الفرعية. - يمكنك لاحقًا استبدال
print()بأي وظيفة حقيقية مثل حفظ ملف أو تنفيذ أمر معين.

