تقنيات نور التعليمية تقنيات نور التعليمية

آخر الأخبار

جاري التحميل ...

الدرس السابع: إضافة مربعات الحوار (Dialogs) باستخدام PyQt Designer

في هذا الدرس سنتعلم كيفية إنشاء واستخدام مربعات الحوار (Dialogs) في PyQt Designer، وهي النوافذ الصغيرة التي تظهر للمستخدم لعرض رسالة، أو طلب إدخال، أو تأكيد إجراء معين.

Dialogs

ما هي مربعات الحوار؟

  • Dialog: نافذة صغيرة تظهر فوق النافذة الرئيسية.
  • تُستخدم عادةً لعرض تنبيهات، أو للحصول على مدخلات من المستخدم، أو لتأكيد أو إلغاء أمر ما.


أنواع مربعات الحوار في PyQt

  1. QMessageBox: لعرض رسائل معلومات، تحذير، أو خطأ.
  2. QInputDialog: لطلب قيمة نصية أو رقمية من المستخدم.
  3. QFileDialog: لفتح أو حفظ الملفات.
  4. QColorDialog: لاختيار الألوان.
  5. QFontDialog: لاختيار الخطوط.


إنشاء Dialog باستخدام Designer

1-افتح Qt Designer.
2- عند اختيار نوع الواجهة الجديدة، اختر Dialog without Buttons.
3- أضف عناصر مثل:

  • QLabel لعرض النص.
  • QLineEdit لإدخال قيمة.
  • زرين (موافق – إلغاء).

4- احفظ الملف باسم:

dialog_sample.ui

الكود لفتح الـ Dialog

import sys
from PyQt5 import QtWidgets, uic

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("mainwindow.ui", self)

        # ربط زر لفتح نافذة الحوار
        self.pushButton.clicked.connect(self.open_dialog)

    def open_dialog(self):
        dialog = QtWidgets.QDialog()
        uic.loadUi("dialog_sample.ui", dialog)
        dialog.exec_()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

النتيجة

  • عند الضغط على زر "فتح الحوار"، ستظهر نافذة صغيرة (Dialog) مصممة في Qt Designer.
  • يمكن أن تحتوي هذه النافذة على أي عناصر إدخال أو رسائل حسب رغبتك.


📌 التمرين

1-نافذة رئيسية تحتوي على زر بعنوان "إدخال بيانات".
2-عند الضغط على الزر تظهر نافذة Dialog تحتوي على:
  • حقل إدخال الاسم.
  • حقل إدخال البريد الإلكتروني.
  • زر "حفظ" يقوم بإغلاق النافذة بعد إدخال البيانات.


✅ الحل

1. تصميم النوافذ في Qt Designer

النافذة الرئيسية (mainwindow.ui):
  • أضف زر QPushButton بعنوان "إدخال بيانات".
نافذة الحوار (dialog_sample.ui):
  • QLabel: "الاسم"
  • QLineEdit: لإدخال الاسم (نسميه lineEditName)
  • QLabel: "البريد الإلكتروني"
  • QLineEdit: لإدخال البريد (نسميه lineEditEmail)
  • QPushButton: "حفظ" (نسميه btnSave)


2. الكود بايثون

import sys
from PyQt5 import QtWidgets, uic

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("mainwindow.ui", self)

        # ربط زر فتح نافذة الحوار
        self.pushButton.clicked.connect(self.open_dialog)

    def open_dialog(self):
        dialog = DataDialog()
        if dialog.exec_() == QtWidgets.QDialog.Accepted:
            name, email = dialog.get_data()
            QtWidgets.QMessageBox.information(self, "البيانات المدخلة", f"الاسم: {name}\nالبريد: {email}")

class DataDialog(QtWidgets.QDialog):
    def __init__(self):
        super().__init__()
        uic.loadUi("dialog_sample.ui", self)

        # ربط زر الحفظ
        self.btnSave.clicked.connect(self.save_and_close)

    def save_and_close(self):
        self.accept()  # إغلاق النافذة مع إرجاع Accepted

    def get_data(self):
        return self.lineEditName.text(), self.lineEditEmail.text()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

🎯 النتيجة

  • عند تشغيل البرنامج تظهر نافذة رئيسية بها زر "إدخال بيانات".
  • عند الضغط على الزر يظهر Dialog لإدخال الاسم والبريد الإلكتروني.
  • عند الضغط على زر "حفظ"، تُغلق النافذة ويظهر مربع رسالة يحتوي على البيانات المدخلة.


✅ النسخة المطورة — الحفظ التلقائي في Excel

1. المتطلبات

قبل البداية، لازم تثبّت مكتبة openpyxl إذا ما كانت موجودة:

pip install openpyxl

2. الكود بايثون

import sys
import os
from PyQt5 import QtWidgets, uic
from openpyxl import Workbook, load_workbook

EXCEL_FILE = "data.xlsx"

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi("mainwindow.ui", self)

        # ربط زر فتح نافذة الحوار
        self.pushButton.clicked.connect(self.open_dialog)

    def open_dialog(self):
        dialog = DataDialog()
        if dialog.exec_() == QtWidgets.QDialog.Accepted:
            name, email = dialog.get_data()
            self.save_to_excel(name, email)
            QtWidgets.QMessageBox.information(self, "تم الحفظ", f"تم حفظ البيانات:\nالاسم: {name}\nالبريد: {email}")

    def save_to_excel(self, name, email):
        # إذا الملف غير موجود، ننشئه مع عناوين الأعمدة
        if not os.path.exists(EXCEL_FILE):
            workbook = Workbook()
            sheet = workbook.active
            sheet.title = "Users"
            sheet.append(["الاسم", "البريد الإلكتروني"])
            workbook.save(EXCEL_FILE)

        # نفتح الملف ونضيف البيانات
        workbook = load_workbook(EXCEL_FILE)
        sheet = workbook.active
        sheet.append([name, email])
        workbook.save(EXCEL_FILE)


class DataDialog(QtWidgets.QDialog):
    def __init__(self):
        super().__init__()
        uic.loadUi("dialog_sample.ui", self)

        # ربط زر الحفظ
        self.btnSave.clicked.connect(self.save_and_close)

    def save_and_close(self):
        if not self.lineEditName.text() or not self.lineEditEmail.text():
            QtWidgets.QMessageBox.warning(self, "خطأ", "الرجاء إدخال جميع البيانات")
        else:
            self.accept()  # إغلاق النافذة مع إرجاع Accepted

    def get_data(self):
        return self.lineEditName.text(), self.lineEditEmail.text()


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

🎯 النتيجة

عند إدخال الاسم والبريد في نافذة الـ Dialog والضغط على "حفظ"، يتم:
  1. إغلاق النافذة.
  2. إضافة البيانات مباشرة داخل ملف data.xlsx.
  3. إظهار رسالة "تم الحفظ".


🔜 في الدرس الثامن سنتعلم كيف نضيف مربعات اختيار (Checkboxes) وأزرار التحديد (Radio Buttons) ونربطها بالأحداث.

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

إذا أعجبك محتوى مدونتنا نتمنى البقاء على تواصل دائم ، فقط قم بإدخال بريدك الإلكتروني للإشتراك في بريد المدونة السريع ليصلك جديد المدونة أولاً بأول ، كما يمكنك إرسال رساله بالضغط على الزر المجاور ...

جميع الحقوق محفوظة

تقنيات نور التعليمية