پروژه دوم پایتون : ساعت جهانی

خب برای این پروژه وسایلی که نیاز دارید :

  • خود برنامه پایتون

  • کتابخانه

    tkinter

  • کتابخانه pytz

  • کتابخانه datetime

کتابخانه های لازم را نصب کنید و کد زیر را دخل آن وارد کنید .

import tkinter as tk
from tkinter import ttk
from datetime import datetime, timezone
import pytz

# ------------------- ساخت دیکشنری تمام مناطق زمانی ------------------- #

def build_timezones_dict():
    """
    ایجاد دیکشنری شامل تمام مناطق زمانی در pytz
    به همراه offset فعلی نسبت به UTC به صورت متنی
    مثل: "Asia/Tehran (UTC+03:30)"
    """
    timezones = {}
    for tz_name in pytz.all_timezones:
        tz = pytz.timezone(tz_name)

        # استفاده از روش جدید و استاندارد برای زمان UTC
        now_utc = datetime.now(timezone.utc)
        now_local = now_utc.astimezone(tz)
        offset_seconds = now_local.utcoffset().total_seconds()

        hours = int(offset_seconds // 3600)
        minutes = int((offset_seconds % 3600) // 60)

        sign = "+" if offset_seconds >= 0 else "-"
        abs_hours = abs(hours)
        abs_minutes = abs(minutes)

        offset_str = f"UTC{sign}{abs_hours:02d}:{abs_minutes:02d}"
        display_name = f"{tz_name} ({offset_str})"
        timezones[display_name] = tz_name

    # مرتب‌سازی بر اساس نام برای نمایش مرتب در Combobox
    sorted_dict = dict(sorted(timezones.items(), key=lambda x: x[0]))
    return sorted_dict


timezone_display_to_tzname = build_timezones_dict()


# ------------------- منطق گرفتن ساعت ------------------- #

def get_time_in_timezone(tz_name: str) -> str:
    """دریافت تاریخ و ساعت فعلی در منطقه زمانی انتخابی"""
    tz = pytz.timezone(tz_name)
    now = datetime.now(tz)
    return now.strftime("%Y-%m-%d  %H:%M:%S")


# ------------------- رابط گرافیکی ------------------- #

class WorldClockApp:
    def __init__(self, master):
        self.master = master
        master.title("نمایشگر ساعت جهانی")
        master.geometry("650x250")
        master.minsize(550, 250)

        # فریم اصلی
        main_frame = ttk.Frame(master, padding=10)
        main_frame.pack(fill="both", expand=True)

        # عنوان بالای برنامه
        self.title_label = ttk.Label(
            main_frame,
            text="ساعت جهانی",
            font=("Tahoma", 17, "bold")
        )
        self.title_label.pack(pady=(10, 15))

        # فریم انتخاب منطقه زمانی
        tz_frame = ttk.Frame(main_frame)
        tz_frame.pack(fill="x", pady=(0, 10))

        ttk.Label(
            tz_frame,
            text="منطقه زمانی را انتخاب کنید:",
            font=("Tahoma", 11)
        ).pack(side="left")

        self.tz_var = tk.StringVar()
        self.tz_combobox = ttk.Combobox(
            tz_frame,
            textvariable=self.tz_var,
            values=list(timezone_display_to_tzname.keys()),
            width=50,
            font=("Tahoma", 10)
        )
        self.tz_combobox.pack(side="left", padx=(10, 0), fill="x", expand=True)

        # انتخاب پیش‌فرض: Asia/Tehran اگر موجود باشد
        for display in timezone_display_to_tzname:
            if "Asia/Tehran" in display:
                self.tz_combobox.set(display)
                break

        # لیبل نمایش زمان
        self.time_label = ttk.Label(
            main_frame,
            text="--:--:--",
            font=("Consolas", 22, "bold"),
            foreground="#00b33c"
        )
        self.time_label.pack(pady=20)

        # دکمه خروج
        ttk.Button(main_frame, text="خروج", command=master.quit).pack(pady=5)

        # شروع به‌روزرسانی ساعت
        self.update_clock()

    def update_clock(self):
        """به‌روزرسانی ساعت هر ثانیه بر اساس منطقه انتخاب شده"""
        chosen_display = self.tz_var.get()
        if chosen_display in timezone_display_to_tzname:
            tz_name = timezone_display_to_tzname[chosen_display]
            current_time_str = get_time_in_timezone(tz_name)
        else:
            current_time_str = "منطقه زمانی نامعتبر"

        self.time_label.config(text=current_time_str)
        self.master.after(1000, self.update_clock)


# ------------------- اجرای برنامه ------------------- #

if __name__ == "__main__":
    root = tk.Tk()

    # DPI Awareness برای ویندوز (اختیاری، اگر نبود خطایی نده)
    try:
        from ctypes import windll
        windll.shcore.SetProcessDpiAwareness(1)
    except Exception:
        pass

    app = WorldClockApp(root)
    root.mainloop()

خب کد را اجرا کنید ، صفحه پایین را می بینید .

فایل خروجی
فایل خروجی

حالا میتونیم کشور خودمون را انتخواب کنیم و ساعت دقیق همون کشور را برای شما به نمایش میگذارد .

برای دانلود همین پایتون یا فایل تبدیل شده به برنامه روی نوشته لینک بزنید و 15ثانیه صبر کنید و فایل را دریافت کنید .

اگر ایده یا پروژه ای دیگری میخواهید در نظر ها بنویسید .