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

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

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

الدرس 22 – استخدام QDateTimeEdit في PyQt

الفكرة العامة

  • QDateTimeEdit يتيح للمستخدم اختيار التاريخ والوقت معًا.
  • يمكن ضبط القيمة الافتراضية (التاريخ والوقت الحالي).
  • يمكن التحكم في صيغة العرض.
  • يمكن قراءة المدخلات ومعالجتها بسهولة.
QDateTimeEdit

المكتبات المطلوبة

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QDateTimeEdit
from PyQt5.QtCore import QDateTime, Qt

مثال أساسي على QDateTimeEdit

class DateTimeEditExample(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("مثال على QDateTimeEdit")
        self.setGeometry(200, 200, 350, 200)

        layout = QVBoxLayout()

        # أداة اختيار التاريخ والوقت
        self.datetime_edit = QDateTimeEdit()
        self.datetime_edit.setDisplayFormat("dd/MM/yyyy HH:mm:ss")
        self.datetime_edit.setDateTime(QDateTime.currentDateTime())  # التاريخ والوقت الحالي

        # تسمية لعرض القيم
        self.label = QLabel("اختر تاريخًا ووقتًا")
        self.label.setAlignment(Qt.AlignCenter)

        # عند التغيير
        self.datetime_edit.dateTimeChanged.connect(self.show_datetime)

        layout.addWidget(self.datetime_edit)
        layout.addWidget(self.label)

        self.setLayout(layout)

    def show_datetime(self, datetime):
        self.label.setText(f"التاريخ والوقت المختار: {datetime.toString('dd/MM/yyyy HH:mm:ss')}")

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

شرح الكود

  1. QDateTimeEdit() لإنشاء الأداة.
  2. setDisplayFormat("dd/MM/yyyy HH:mm:ss") لتحديد صيغة عرض التاريخ والوقت.
  3. setDateTime(QDateTime.currentDateTime()) لتحديد القيمة الافتراضية (الحالية).
  4. dateTimeChanged.connect(...) لربط التغيير بدالة.

تمرين عملي – حساب الفرق بين الموعد الحالي وموعد يحدده المستخدم

في هذا التمرين سنسمح للمستخدم بتحديد تاريخ ووقت معينين، ثم نحسب كم يوم وساعة ودقيقة متبقية حتى هذا الموعد.


الكود مع الحل

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QDateTimeEdit
from PyQt5.QtCore import QDateTime, Qt

class DateTimeDifference(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("حساب الفرق بين الموعدين")
        self.setGeometry(200, 200, 400, 250)

        layout = QVBoxLayout()

        self.datetime_edit = QDateTimeEdit()
        self.datetime_edit.setDisplayFormat("dd/MM/yyyy HH:mm:ss")
        self.datetime_edit.setDateTime(QDateTime.currentDateTime())

        self.label = QLabel("اختر تاريخًا ووقتًا")
        self.label.setAlignment(Qt.AlignCenter)

        self.datetime_edit.dateTimeChanged.connect(self.calculate_difference)

        layout.addWidget(self.datetime_edit)
        layout.addWidget(self.label)
        self.setLayout(layout)

    def calculate_difference(self, selected_datetime):
        now = QDateTime.currentDateTime()
        diff_seconds = now.secsTo(selected_datetime)  # الفرق بالثواني

        if diff_seconds > 0:
            days = diff_seconds // 86400
            hours = (diff_seconds % 86400) // 3600
            minutes = (diff_seconds % 3600) // 60
            self.label.setText(f"المتبقي: {days} يوم، {hours} ساعة، {minutes} دقيقة")
        elif diff_seconds == 0:
            self.label.setText("الوقت الحالي هو الموعد المختار ✅")
        else:
            self.label.setText(f"لقد مرّ {abs(diff_seconds)//60} دقيقة على الموعد المختار")

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

شرح التمرين

  • نستخدم secsTo() لحساب الفرق بالثواني.
  • نقوم بتحويل الثواني إلى أيام، ساعات، ودقائق.
  • إذا الفرق موجب → الموعد في المستقبل.
  • إذا الفرق سالب → الموعد في الماضي.
  • إذا الفرق صفر → نفس اللحظة.

📌 النتيجة:
يمكنك الآن تحديد موعد كامل ومعرفة الوقت المتبقي أو المنقضي بدقة.

عن الكاتب

Tamer Ahmed

التعليقات


اتصل بنا

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

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

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