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

جاري صيانة و تحديث للمدونة

في الوقت الحالي
جاري التحميل ...

📝 الدرس 25: استخدام QCalendarWidget في PyQt

📌 ما هو QCalendarWidget؟

QCalendarWidget هو عنصر واجهة (Widget) في PyQt يتيح للمستخدم عرض تقويم واختيار التواريخ بسهولة.
يمكنك استخدامه في أي تطبيق يحتاج لتحديد مواعيد، مثل تطبيقات الحجز أو تنظيم المواعيد.

QCalendarWidget

⚙️ الخطوات الأساسية لاستخدامه:

  1. إنشاء عنصر QCalendarWidget.
  2. تحديد تاريخ البداية أو النهاية إذا لزم الأمر.
  3. ربطه مع حدث لاختيار التاريخ.
  4. عرض التاريخ المحدد في عنصر آخر مثل QLabel.

💻 مثال عملي:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QCalendarWidget, QLabel
from PyQt5.QtCore import QDate

class CalendarExample(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("مثال على QCalendarWidget")
        self.setGeometry(200, 200, 400, 300)

        layout = QVBoxLayout()

        # إنشاء التقويم
        self.calendar = QCalendarWidget()
        self.calendar.setGridVisible(True)  # إظهار الشبكة
        self.calendar.clicked.connect(self.show_date)  # عند اختيار تاريخ

        # تسمية لعرض التاريخ
        self.label = QLabel("اختر تاريخًا من التقويم")
        self.label.setStyleSheet("font-size: 16px; color: blue;")

        layout.addWidget(self.calendar)
        layout.addWidget(self.label)

        self.setLayout(layout)

    def show_date(self):
        date = self.calendar.selectedDate()
        self.label.setText(f"التاريخ المحدد: {date.toString('dd/MM/yyyy')}")

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

📌 شرح الكود:

  • QCalendarWidget(): ينشئ عنصر التقويم.
  • setGridVisible(True): يجعل شبكة التقويم مرئية.
  • clicked.connect(self.show_date): يربط اختيار أي تاريخ بتنفيذ الدالة show_date.
  • selectedDate(): ترجع التاريخ الذي اختاره المستخدم.
  • toString('dd/MM/yyyy'): يحول التاريخ إلى نص بالصيغة المطلوبة.

🎯 النتيجة المتوقعة:

  • عند تشغيل البرنامج، سيظهر تقويم.
  • عند اختيار أي تاريخ، سيُعرض في الأسفل بصيغة "يوم/شهر/سنة".

تمرين على QDateEdit و QTimeEdit 

قم بإنشاء تطبيق PyQt يحتوي على:

  1. QDateEdit لاختيار تاريخ الميلاد.
  2. QTimeEdit لاختيار وقت محدد.
  3. زر عند الضغط عليه يعرض رسالة تحتوي على التاريخ والوقت المختارين.
  4. تنسيق التاريخ يكون على شكل: يوم/شهر/سنة.
  5. تنسيق الوقت يكون على شكل: ساعات:دقائق:ثوان.

الحل

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QDateEdit, QTimeEdit, QPushButton, QMessageBox
from PyQt5.QtCore import QDate, QTime

class DateTimeApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("تمرين QDateEdit و QTimeEdit")
        self.resize(300, 200)

        # Layout
        layout = QVBoxLayout()

        # مكون لاختيار التاريخ
        self.date_edit = QDateEdit()
        self.date_edit.setDate(QDate.currentDate())  # تعيين تاريخ اليوم
        self.date_edit.setDisplayFormat("dd/MM/yyyy")  # تنسيق العرض
        layout.addWidget(self.date_edit)

        # مكون لاختيار الوقت
        self.time_edit = QTimeEdit()
        self.time_edit.setTime(QTime.currentTime())  # تعيين الوقت الحالي
        self.time_edit.setDisplayFormat("HH:mm:ss")  # تنسيق العرض
        layout.addWidget(self.time_edit)

        # زر عرض البيانات
        btn_show = QPushButton("عرض التاريخ والوقت")
        btn_show.clicked.connect(self.show_datetime)
        layout.addWidget(btn_show)

        self.setLayout(layout)

    def show_datetime(self):
        selected_date = self.date_edit.date().toString("dd/MM/yyyy")
        selected_time = self.time_edit.time().toString("HH:mm:ss")
        QMessageBox.information(self, "البيانات المختارة", f"التاريخ: {selected_date}\nالوقت: {selected_time}")

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

شرح مختصر

  • QDateEdit و QTimeEdit تسمح للمستخدم باختيار التاريخ والوقت.
  • استخدمنا setDisplayFormat() لتنسيق طريقة العرض.
  • عند الضغط على الزر، يتم عرض التاريخ والوقت في QMessageBox.

نسخة مطورة من التمرين:

  • تختار التاريخ والوقت من QDateEdit و QTimeEdit.
  • عند الضغط على الزر، يتم حفظهما في ملف Excel مع كل ضغطة زر (إضافة صف جديد).
  • إذا لم يكن ملف Excel موجودًا، سيتم إنشاؤه تلقائيًا.

الكود

import sys
import os
import pandas as pd
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QDateEdit, QTimeEdit, QPushButton, QMessageBox
from PyQt5.QtCore import QDate, QTime

class DateTimeApp(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("حفظ التاريخ والوقت في Excel")
        self.resize(300, 200)

        layout = QVBoxLayout()

        # اختيار التاريخ
        self.date_edit = QDateEdit()
        self.date_edit.setDate(QDate.currentDate())
        self.date_edit.setDisplayFormat("dd/MM/yyyy")
        layout.addWidget(self.date_edit)

        # اختيار الوقت
        self.time_edit = QTimeEdit()
        self.time_edit.setTime(QTime.currentTime())
        self.time_edit.setDisplayFormat("HH:mm:ss")
        layout.addWidget(self.time_edit)

        # زر الحفظ
        btn_save = QPushButton("حفظ في Excel")
        btn_save.clicked.connect(self.save_to_excel)
        layout.addWidget(btn_save)

        self.setLayout(layout)

    def save_to_excel(self):
        # الحصول على البيانات
        selected_date = self.date_edit.date().toString("dd/MM/yyyy")
        selected_time = self.time_edit.time().toString("HH:mm:ss")

        # اسم ملف الإكسل
        file_name = "dates_times.xlsx"

        # إذا كان الملف موجودًا نقرأه، إذا لا، ننشئه
        if os.path.exists(file_name):
            df = pd.read_excel(file_name)
        else:
            df = pd.DataFrame(columns=["التاريخ", "الوقت"])

        # إضافة البيانات الجديدة
        new_row = {"التاريخ": selected_date, "الوقت": selected_time}
        df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)

        # حفظ الملف
        df.to_excel(file_name, index=False)

        QMessageBox.information(self, "تم الحفظ", f"تم حفظ التاريخ والوقت:\n{selected_date} - {selected_time}")

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

طريقة العمل

  1. تختار التاريخ من QDateEdit والوقت من QTimeEdit.
  2. تضغط زر "حفظ في Excel".
  3. البرنامج سيضيف التاريخ والوقت في ملف dates_times.xlsx.
  4. كل ضغطة زر تضيف صف جديد دون حذف البيانات السابقة.

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

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

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

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