الفكرة العامة
- 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_())
شرح الكود
- QDateTimeEdit() لإنشاء الأداة.
- setDisplayFormat("dd/MM/yyyy HH:mm:ss") لتحديد صيغة عرض التاريخ والوقت.
- setDateTime(QDateTime.currentDateTime()) لتحديد القيمة الافتراضية (الحالية).
- 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() لحساب الفرق بالثواني.
- نقوم بتحويل الثواني إلى أيام، ساعات، ودقائق.
- إذا الفرق موجب → الموعد في المستقبل.
- إذا الفرق سالب → الموعد في الماضي.
- إذا الفرق صفر → نفس اللحظة.
📌 النتيجة:
يمكنك الآن تحديد موعد كامل ومعرفة الوقت المتبقي أو المنقضي بدقة.