في هذا الدرس سنتعلم كيفية استخدام مربعات الرسائل الجاهزة في PyQt، مثل رسائل التحذير أو التأكيد أو المعلومات التي تظهر للمستخدم عند التفاعل مع النوافذ.
✅ مثال تطبيقي على Message Boxes:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
class MyApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("مربعات الرسائل")
self.setGeometry(100, 100, 300, 200)
self.button = QPushButton("إظهار رسالة", self)
self.button.clicked.connect(self.show_message)
self.button.move(100, 80)
def show_message(self):
msg = QMessageBox()
msg.setWindowTitle("تنبيه")
msg.setText("هل تريد المتابعة؟")
msg.setIcon(QMessageBox.Question)
msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
response = msg.exec_()
if response == QMessageBox.Yes:
QMessageBox.information(self, "تم", "لقد اخترت نعم!")
else:
QMessageBox.information(self, "تم", "لقد اخترت لا!")
app = QApplication(sys.argv)
window = MyApp()
window.show()
sys.exit(app.exec_())
🧠 ملاحظات مهمة:
QMessageBoxتسمح لك بإنشاء رسائل من أنواع مختلفة:Information,Warning,Critical,Question.- يمكن التحكم بالأزرار الم: عروضة باستخدام
setStandardButtons. - يمكن التحقق من الزر الذي ضغط عليه المستخدم باستخدام القيمة المرجعة من
exec_().
🧪 التمرين التطبيقي - PyQt الدرس 5
🎯 المطلوب:
إنشاء نافذة تحتوي على زر مكتوب عليه "احذف الملف".
عند النقر على الزر، تظهر رسالة تأكيد (Message Box) تسأل المستخدم:
"هل أنت متأكد أنك تريد حذف الملف؟"
- إذا ضغط المستخدم على Yes، يظهر مربع رسالة آخر يقول:
"تم حذف الملف بنجاح." - إذا ضغط على No، يظهر مربع رسالة يقول:
"تم إلغاء العملية."
✅ الحل الكامل:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
class DeleteFileApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("رسالة تأكيد حذف")
self.setGeometry(200, 200, 300, 200)
self.button = QPushButton("احذف الملف", self)
self.button.clicked.connect(self.confirm_delete)
self.button.move(90, 80)
def confirm_delete(self):
reply = QMessageBox.question(
self,
"تأكيد الحذف",
"هل أنت متأكد أنك تريد حذف الملف؟",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No
)
if reply == QMessageBox.Yes:
QMessageBox.information(self, "تم الحذف", "تم حذف الملف بنجاح.")
else:
QMessageBox.information(self, "تم الإلغاء", "تم إلغاء العملية.")
app = QApplication(sys.argv)
window = DeleteFileApp()
window.show()
sys.exit(app.exec_())
💡 ما تم استخدامه في هذا التمرين:
QMessageBox.question()لعرض رسالة تأكيد.- فحص الاستجابة وتغيير محتوى الرسالة بحسب الزر الذي تم الضغط عليه.
✅ ملاحظات مهمة عن استخدام QMessageBox في PyQt
1. أنواع صناديق الرسائل:
| نوع الرسالة | الوظيفة | الشكل المستخدم |
|---|---|---|
QMessageBox.information |
لعرض رسالة إعلامية (عادية) | ℹ️ |
QMessageBox.warning |
لعرض تحذير | ⚠️ |
QMessageBox.critical |
لعرض خطأ أو مشكلة خطيرة | ❌ |
QMessageBox.question |
لطرح سؤال يتطلب اختيار (Yes/No) | ❓ |
2. الخيارات المتاحة في الردود:
عند استخدام QMessageBox.question() يمكنك تحديد الأزرار مثل:
QMessageBox.Yes
QMessageBox.No
QMessageBox.Cancel
QMessageBox.Ok
مثال:
QMessageBox.question(
self,
"السؤال",
"هل تريد الاستمرار؟",
QMessageBox.Yes | QMessageBox.No | QMessageBox.Cancel
)
3. كيفية التعامل مع الرد:
بعد استدعاء question()، يتم تخزين الرد في متغير، ويمكن التحقق منه هكذا:
if reply == QMessageBox.Yes:
# نفذ شيء ما
elif reply == QMessageBox.No:
# نفذ شيء آخر
4. تعيين زر افتراضي:
يمكنك تحديد الزر الافتراضي الذي سيكون مفعّلًا إذا ضغط المستخدم Enter:
QMessageBox.question(
self,
"عنوان",
"رسالة",
QMessageBox.Yes | QMessageBox.No,
QMessageBox.No # الزر الافتراضي
)
5. الترتيب الجيد لكتابة الرسائل:
دائمًا يُفضَّل أن:
- يكون العنوان قصيرًا وواضحًا.
- تحتوي الرسالة على سؤال مباشر أو توضيح واضح.
- تكون الأزرار مناسبة للسياق (لا تضع OK/Cancel في رسالة "هل تريد حذف الملف؟" بل استخدم Yes/No).

