آموزش ساخت ساعت دیجیتالی با پایتون و Tkinter (مرحله‌به‌مرحله)

چطور در چند خط کد ساده یک ساعت دیجیتالی داشته باشیم!

آموزش ساخت ساعت دیجیتالی با پایتون و Tkinter (مرحله‌به‌مرحله)

ساخت یک ساعت دیجیتالی یکی از بهترین تمرین‌ها برای یادگیری برنامه‌نویسی رابط گرافیکی در پایتون است. این پروژه در ظاهر ساده است، اما مفاهیم مهمی مثل به‌روزرسانی دوره‌ای رابط کاربری، کار با زمان، ویجت‌های Tkinter و مدیریت حلقه اصلی برنامه را به‌شکل عملی آموزش می‌دهد. در این مقاله، قدم‌به‌قدم ساخت یک ساعت دیجیتالی را بررسی می‌کنیم؛ از ایجاد یک پنجره ساده شروع می‌کنیم و در نهایت به ساعتی می‌رسیم که هر ثانیه به‌صورت خودکار به‌روزرسانی می‌شود.


مرحله اول: ایمپورت کتابخانه‌ها

هر برنامه پایتونی قبل از هر چیز به ایمپورت کتابخانه‌های موردنیاز احتیاج دارد. در این پروژه از دو کتابخانه استفاده می‌کنیم.

from tkinter import *
from time import strftime

کتابخانه tkinter برای ساخت رابط گرافیکی استفاده می‌شود. در اینجا از ایمپورت به‌صورت ستاره‌ای استفاده شده تا به همه ویجت‌ها و کلاس‌ها بدون پیشوند دسترسی داشته باشیم. کتابخانه time نیز برای کار با زمان سیستم استفاده می‌شود و تابع strftime امکان قالب‌بندی زمان فعلی را در اختیار ما قرار می‌دهد.


مرحله دوم: ساخت پنجره اصلی برنامه

بعد از ایمپورت کتابخانه‌ها، نوبت به ساخت پنجره اصلی می‌رسد؛ جایی که ساعت دیجیتالی روی آن نمایش داده می‌شود.

root = Tk()
root.title("My Clock")

با فراخوانی Tk یک پنجره جدید ساخته می‌شود که پایه اصلی رابط گرافیکی است. تمام اجزای برنامه داخل این پنجره قرار می‌گیرند. سپس با استفاده از title یک عنوان ساده برای پنجره تعیین می‌کنیم تا هنگام اجرا، نام برنامه در نوار بالای پنجره نمایش داده شود. در این مرحله اگر برنامه را اجرا کنیم، یک پنجره خالی خواهیم داشت که نشان می‌دهد محیط گرافیکی به‌درستی ایجاد شده است.


مرحله سوم: تعریف تابع دریافت و نمایش زمان

قلب این برنامه تابعی است که زمان را از سیستم دریافت می‌کند و آن را روی صفحه نمایش می‌دهد.

def get_time():
    time = strftime("%H:%M:%S %p")
    level.config(text=time)
    level.after(1000, get_time)

در این تابع ابتدا زمان فعلی سیستم با استفاده از strftime خوانده می‌شود. الگوی %H:%M:%S ساعت، دقیقه و ثانیه را به‌صورت دیجیتالی نمایش می‌دهد و %p برای نمایش AM یا PM استفاده می‌شود. سپس با متد config متن لیبل تغییر داده می‌شود تا زمان جدید روی صفحه دیده شود.

نکته مهم اینجاست که در انتهای تابع از متد after استفاده شده است. این متد به Tkinter می‌گوید که بعد از ۱۰۰۰ میلی‌ثانیه، یعنی یک ثانیه، دوباره همین تابع اجرا شود. به این شکل، بدون استفاده از حلقه‌های سنگین، ساعت به‌صورت زنده به‌روزرسانی می‌شود.


مرحله چهارم: ساخت لیبل نمایشگر ساعت

برای نمایش زمان به یک ویجت از نوع Label نیاز داریم.

level = Label(
    root,
    font=("Digital-7", 80),
    background="black",
    foreground="yellow"
)

این لیبل داخل پنجره اصلی ساخته می‌شود و نقش نمایشگر ساعت را دارد. فونت Digital-7 ظاهری شبیه ساعت‌های دیجیتالی واقعی ایجاد می‌کند. اندازه فونت بزرگ انتخاب شده تا خوانایی بالا باشد. پس‌زمینه مشکی و رنگ متن زرد نیز ترکیبی کلاسیک و مناسب برای ساعت دیجیتال هستند.


مرحله پنجم: قرار دادن لیبل در پنجره

بعد از ساخت لیبل، باید آن را در پنجره نمایش دهیم.

level.pack(anchor="center")

با استفاده از pack لیبل در پنجره قرار می‌گیرد. پارامتر anchor باعث می‌شود لیبل در مرکز پنجره قرار بگیرد. در این مرحله اگر برنامه اجرا شود، یک صفحه سیاه با متن زرد خواهیم دید که هنوز مقدار زمان در آن نمایش داده نشده است.


مرحله ششم: شروع به‌روزرسانی زمان

اکنون نوبت به اجرای اولیه تابع زمان می‌رسد.

get_time()

با فراخوانی این تابع، زمان فعلی روی لیبل نمایش داده می‌شود و از آن‌جایی که داخل تابع از after استفاده شده، به‌روزرسانی هر ثانیه به‌صورت خودکار ادامه پیدا می‌کند. این خط عملاً موتور اصلی ساعت را روشن می‌کند.


مرحله هفتم: اجرای حلقه اصلی برنامه

در نهایت باید برنامه را وارد حلقه اصلی Tkinter کنیم.

root.mainloop()

این دستور باعث می‌شود پنجره باز بماند و برنامه به رویدادها پاسخ دهد. بدون این خط، پنجره بلافاصله بسته می‌شود و هیچ‌چیز نمایش داده نخواهد شد.


کد کامل ساعت دیجیتالی با Tkinter

در این بخش کل کد را یک‌جا مشاهده می‌کنیم.

from tkinter import *
from time import strftime

root = Tk()
root.title("My Clock")

def get_time():
    time = strftime("%H:%M:%S %p")
    level.config(text=time)
    level.after(1000, get_time)

level = Label(
    root,
    font=("Digital-7", 80),
    background="black",
    foreground="yellow"
)
level.pack(anchor="center")

get_time()

root.mainloop()

سخن پایانی

ساعت دیجیتالی با Tkinter نمونه‌ای عالی برای یادگیری به‌روزرسانی پویا در رابط‌های گرافیکی پایتون است. در این پروژه یاد گرفتیم چطور با زمان سیستم کار کنیم، چگونه بدون حلقه‌های بی‌نهایت رابط کاربری را به‌روزرسانی کنیم و چگونه از ویجت‌های ساده برای ساخت یک برنامه کاربردی استفاده کنیم. این پایه می‌تواند به‌راحتی گسترش داده شود؛ برای مثال اضافه کردن تاریخ، تغییر تم رنگی، نمایش ساعت جهانی یا حتی ساخت یک تایمر و کرنومتر کامل.