معرفی
این پروژه یک ابزار تبدیل تاریخ بین تقویم شمسی و میلادی است. با استفاده از آن میتوانید یک تاریخ را به راحتی از شمسی به میلادی و برعکس تبدیل کنید. رابط کاربری برنامه با CustomTkinter ساخته شده تا ظاهر مدرن و کاربرپسند داشته باشد.
پیشنیازها
برای اجرای این پروژه نیاز به نصب کتابخانههای زیر دارید:
- customtkinter: برای ایجاد رابط کاربری مدرن
- tkinter: کتابخانه استاندارد رابط کاربری پایتون
- persiantools: برای کار با تاریخ شمسی
- datetime: ماژول داخلی پایتون برای تاریخ و زمان
نصب کتابخانههای مورد نیاز:
pip install customtkinter persiantools
راهاندازی پروژه
مراحل راهاندازی پروژه:
- یک فایل پایتون جدید بسازید، مثلاً date_converter.py
- کد پروژه را در فایل قرار دهید
- از یک محیط مجازی (Virtual Environment) استفاده کنید تا وابستگیها مدیریت شوند
ساختار پروژه
ساختار پروژه ساده است و شامل بخشهای زیر میشود:
date_converter/
│
└── date_converter.py # فایل اصلی برنامه
در خود فایل اصلی:
- ایجاد رابط کاربری با CTk()
- ورودی کاربر با CTkEntry
- دکمههای تبدیل تاریخ با CTkButton
- نمایش نتیجه با CTkLabel
- دو تابع convert_to_gregorian و convert_to_jalali برای تبدیل تاریخ
ویژگیهای اصلی
- رابط کاربری مدرن با تم تاریک
- ورودی ساده با راهنمایی فرمت تاریخ
- تبدیل دوطرفه: شمسی به میلادی و میلادی به شمسی
- نمایش خطای کاربر در صورت وارد کردن فرمت نادرست تاریخ
پیادهسازی
تابع convert_to_gregorian():
- دریافت متن ورودی از کاربر
- بررسی فرمت (سال/ماه/روز)
- تبدیل تاریخ شمسی به میلادی با JalaliDate.to_gregorian()
- نمایش نتیجه در output_label
تابع convert_to_jalali():
- دریافت تاریخ میلادی از ورودی
- تبدیل به شیء تاریخ پایتون با datetime.date
- تبدیل به شمسی با JalaliDate.to_jalali()
- نمایش نتیجه یا پیام خطا
کدنویسی پروژه
import customtkinter as ctk
from tkinter import *
from persiantools.jdatetime import JalaliDate
import datetime
ctk.set_appearance_mode("Dark")
ctk.set_default_color_theme("blue")
root = ctk.CTk()
root.title("تبدیل تاریخ")
root.geometry("400x500")
def convert_to_gregorian():
try:
parts = entry.get().strip().split('/')
if len(parts) != 3:
raise ValueError
year, month, day = map(int, parts)
jalali = JalaliDate(year, month, day)
greg = jalali.to_gregorian()
output_label.configure(text=f"میلادی: {greg.year}/{greg.month}/{greg.day}")
except:
output_label.configure(text="فرمت نادرست! مثال: 1404/7/8")
def convert_to_jalali():
try:
parts = entry.get().strip().split('/')
if len(parts) != 3:
raise ValueError
year, month, day = map(int, parts)
greg_date = datetime.date(year, month, day)
jalali_date = JalaliDate.to_jalali(greg_date)
output_label.configure(text=f"شمسی: {jalali_date.year}/{jalali_date.month}/{jalali_date.day}")
except:
output_label.configure(text="فرمت نادرست! مثال: 2025/10/29")
entry = ctk.CTkEntry(root, placeholder_text="تاریخ (مثال: 1404/7/8)", width=250, height=40, corner_radius=10)
entry.pack(pady=40)
btn1 = ctk.CTkButton(root, text="تبدیل به میلادی", command=convert_to_gregorian, width=220, height=50, corner_radius=20)
btn1.pack(pady=20)
btn2 = ctk.CTkButton(root, text="تبدیل به شمسی", command=convert_to_jalali, width=220, height=50, corner_radius=20)
btn2.pack(pady=20)
output_label = ctk.CTkLabel(root, text="", font=("Arial", 18))
output_label.pack(pady=40)
root.mainloop()
نحوه اجرا
برای اجرای برنامه کافی است در همان مسیر فایل پایتون دستور زیر را اجرا کنید:
python date_converter.py
یک پنجره باز میشود و شما میتوانید تاریخ خود را وارد کرده و تبدیل را انجام دهید.
عیبیابی
- خطای فرمت نادرست: حتماً تاریخ را به صورت YYYY/MM/DD وارد کنید
- کتابخانه پیدا نشد: اطمینان حاصل کنید که persiantools و customtkinter نصب شده باشند
- خطای اجرا روی سیستم قدیمی: از نسخه پایتون 3.8 یا بالاتر استفاده کنید
منابع و مستندات
- CustomTkinter Documentation
- PersianTools Documentation
- Python datetime module
- Tkinter Tutorial