ساخت مبدل تاریخ شمسی و میلادی با پایتون

پروژه‌های پایتون - رابط کاربری

پروژه ۲ دقیقه مطالعه
فهرست مطالب
این مطلب از سایت tool.hamidvalad.ir گرفته شده است

معرفی

این پروژه یک ابزار تبدیل تاریخ بین تقویم شمسی و میلادی است. با استفاده از آن می‌توانید یک تاریخ را به راحتی از شمسی به میلادی و برعکس تبدیل کنید. رابط کاربری برنامه با CustomTkinter ساخته شده تا ظاهر مدرن و کاربرپسند داشته باشد.

پیش‌نیازها

برای اجرای این پروژه نیاز به نصب کتابخانه‌های زیر دارید:

  • customtkinter: برای ایجاد رابط کاربری مدرن
  • tkinter: کتابخانه استاندارد رابط کاربری پایتون
  • persiantools: برای کار با تاریخ شمسی
  • datetime: ماژول داخلی پایتون برای تاریخ و زمان

نصب کتابخانه‌های مورد نیاز:

pip install customtkinter persiantools

راه‌اندازی پروژه

مراحل راه‌اندازی پروژه:

  1. یک فایل پایتون جدید بسازید، مثلاً date_converter.py
  2. کد پروژه را در فایل قرار دهید
  3. از یک محیط مجازی (Virtual Environment) استفاده کنید تا وابستگی‌ها مدیریت شوند

ساختار پروژه

ساختار پروژه ساده است و شامل بخش‌های زیر می‌شود:

date_converter/
│
└── date_converter.py   # فایل اصلی برنامه

در خود فایل اصلی:

  • ایجاد رابط کاربری با CTk()
  • ورودی کاربر با CTkEntry
  • دکمه‌های تبدیل تاریخ با CTkButton
  • نمایش نتیجه با CTkLabel
  • دو تابع convert_to_gregorian و convert_to_jalali برای تبدیل تاریخ

ویژگی‌های اصلی

  • رابط کاربری مدرن با تم تاریک
  • ورودی ساده با راهنمایی فرمت تاریخ
  • تبدیل دوطرفه: شمسی به میلادی و میلادی به شمسی
  • نمایش خطای کاربر در صورت وارد کردن فرمت نادرست تاریخ

پیاده‌سازی

تابع convert_to_gregorian():

  1. دریافت متن ورودی از کاربر
  2. بررسی فرمت (سال/ماه/روز)
  3. تبدیل تاریخ شمسی به میلادی با JalaliDate.to_gregorian()
  4. نمایش نتیجه در output_label

تابع convert_to_jalali():

  1. دریافت تاریخ میلادی از ورودی
  2. تبدیل به شیء تاریخ پایتون با datetime.date
  3. تبدیل به شمسی با JalaliDate.to_jalali()
  4. نمایش نتیجه یا پیام خطا

کدنویسی پروژه

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