آموزش زبان پایتون (python):یک برنامه ساعت ساده برای ویندوز بنویسیم

3
27
لوگوی زبان python (پایتون)
لوگوی زبان python (پایتون)

انسان های زیادی هستند که به برنامه نویسی علاقه دارند ولی نمی دانند از کجا شروع کنند. با وجود تعداد فراوانی زبان برنامه نویسی هم بیشتر سردرگم می شوند. البته انتخاب زبان مورد نظر کاملا بستگی به نوع استفاده شما دارد،یعنی هدفی که دنبال می کنید. برای مثال شما می خواهید تحت وب کار کنید (به زبان ساده تر وب سایتی طراحی کنید) در این صورت نیاز به یادگیری زبان هایی نظیر php , HTML, CSS, JavaScript و زبانهای به عنوان کنترل پایگاه داده های SQL دارید. اگر توجه کنید خواهید دید این زبان ها ممکل هم هستند و باید در کنار هم استفاده شوند و هر کدام وظیفه ی خاص خود را دارند. همین رویه برای برنامه های تحت ویندوز یا لینوکس به طوری کلی تحت دسکتاپ(desktop) نیز صادق است(دسکتاپ همین کامپیوتر رومیزی شماست). حتی برای نوشتن برنامه برای گوشی های تلفن همراه نیز برخی از زبان ها مناسب ترند.به عنوان مثل اگر قصد نوشتن برنامه ای برای گوشی اندروید خود داشته باشید،پرکاربردترین زبان مورد نیازتان Java است.

پایتون ، ساده ، کارآمد با توانایی اجرای تحت وب !

در این آموزش قصد نوشتن یک  برنامه ساده با زبان پایتون (Python) را داریم. یکی از ویژگی های عالی این زبان سادگی کم نظیر در یادگیری آن است. به خصوص برای کسانی که می خواهند برنامه نویسی را از نقطه آغاز شروع کنند. بعد از یادگیری آن می توانید به سراغ زبان های پرکاربردتر و قوی تر مثل C و Java بروید. البته باید توجه داشته باشید که خود پایتون نیز بسیار پرکاربرد است و در برنامه نویسی تحت وب می توانید از آن استفاده کنید. قبل از هر چیز به سایت پایتون مراجعه کرده و مفسر آن را دانلود کنید. اگر توجه کنید با دو ورژن یا نگارش مختلف از آن رو به رو می شوید یعنی پایتون های نگارش ۲ و ۳٫ در اینجا از پایتون نگارش ۳ برای نوشتن برنامه استفاده شده است.

در بعضی دستورات بین این دو نگارش تفاوت وجود دارد برای مثل دستو پرکاربرد print که برای نشان دادن خروجی استفاده می شود: در پایتون ۳ عبارتی که می خواهیم در خروجی چاپ کنیم باید داخل پرانتز قرار بگیرند. همچنین این نسخه به کتابخانه های بیشتری مجهز شده و با توزیع های متنوع تری از “لینوکس” همگام شده است. البته باید توجه داشت بعضی از توسعه دهندگان که کتابخانه هایی را برای انجام کارهای خاص به خصوص برنامه نویسی وب، ایجاد می کنند هنوز کتابخانه های خود را ممکن است با ورژن ۳ همگام نکرده باشند در نتیجه برای کارهای خاص همچنان مجبور به استفاده از ورژن ۲ خواهید شد.

پایتون بنویسیم !

مانند هر زبان دیگری،ممکن است شما بخواهید از کتابخانه هایی خاص که تابع های منحصر به فردی در خود دارند در برنامه ی خود استفاده کنید، بنابراین در ابتدا کتابخانه های مورد نظر را به برنامه معرفی یا به عبارتی فراخوانی می کنیم. مثالی می زنیم ، فرض کنید می خواهید از دستوراتی چون جذرگیری یا روابط مثلثاتی استفاده کنید، در این صورت باید کتابخانه math که مربوط به این دستورهای ریاضی می باشد را فراخوانی کنید.

توجه شود که از # برای نوشتن کامنت استفاده میشود و کامنت ها در هنگام اجرای برنامه توسط مفسر نادیده گرفته میشوند و از آن ها صرفا جهت توضیح قسمت های مختلف برنامه برای افرادی که کدهای ما را می خوانند و قصد استفاده از ان را دارند یا اینکه هروقت خود ما بعد از مدتی سراغ برنامه آمدیم، بدانیم هرقسمت چه کاری می کند و فقط با خواندن این کامنت ها یادآوری شود. بنابراین خوب است که کامنت گذاری ها را در برنامه های خود به صورت یک عادت درآوریم

import datetime
import time
from tkinter import *

همانطوری که مشخص است برای معرفی کتابخانه به برنامه از دستور import استفاده می شود. در اینجا از سه کتابخانه استفاده شده است. کتابخانه ی datetime به منظور مشخص کردن زمان و تاریخ به کاربرده شده است. دستوری در کتابخانه time وجود دارد که با آن می توان در برنامه تاخیرهایی را برحسب ثانیه ایجاد کرد و سرانجام از کتابخانه ی tkinter به منظور ایجاد محیط گرافیکی استفاده شده است.( توجه شود که از دستور from …. import به منظور فراخوانی تابعی خاص از یک کتابخانه به جای فراخوانی تمامی توابع آن کتابخانه میتوان استفاده کرد و * یعنی تمامی توابع را فراخوانی کن)

def nowYear():
    now = datetime.datetime.now()
    year = now.year
    return str(year)

def nowMonth():
    now = datetime.datetime.now()
    month = now.month
    if month == 1:
        return "January"
    elif month == 2:
        return "February"
    elif month == 3:
        return "March"
    elif month == 4:
        return "April"
    elif month == 5:
        return "May"
    elif month == 6:
        return "June"
    elif month == 7:
        return "July"
    elif month == 8:
        return "August"
    elif month == 9:
        return "September"
    elif month == 10:
        return "October"
    elif month == 11:
        return "November"
    elif month == 12:
        return "December"

def nowDay():
    now = datetime.datetime.now()
    day = now.day
    return str(day)

def nowHour():
    now = datetime.datetime.now()
    hour = now.hour
    return str(hour)

def nowMinute():
    now = datetime.datetime.now()
    minute = now.minute
    return str(minute)

def nowSecond():
    now = datetime.datetime.now()
    second = now.second 
    return str(second)

در این قسمت از برنامه توابعی را تعریف کردیم که مولفه های مختلف زمان را از هم جدا می کنند و خروجی هر یک از توابع در واقع یکی از این مولفه هاست. همانطوری که میبینید از دستور datetime.now() به منظور مشخص کردن زمان حال استفاده شده است. همانطوری که متوجه شده اید، datetime دوبار نوشته شده است و آن به خاطر آن است که کتابخانه ی datetime به صورت کلی فراخوانی شده و برای استفاده از توابع آن ابتدا باید یک datetime نوشته شود. البته در صورتی که این کتابخانه همانند کتابخانه ی tkinter فراخوانی شود (یعنی با استفاده از دستور from … import) دیگر نیازی به نوشته datetime قبل از ازتوابع مورد استفاده از ان کتابخانه نیست. دستور str در واقع متغیر مورد نظر را به صورت رشته (String) تبدیل می کند یعنی به پردازنده دستور می دهد که این مقدار را به عنوان یک عدد نبیند بلکه یک نوشته ببیند.

در ساختنی بخوانید :
با استفاده از رزبری پای یک سیستم تنظیم محیطی ملایم همراه با فرمان صوتی بسازید

نکته ی دیگری که باید توجه شود این است که در هسته ی زبان پایتون دستور switch-case برخلاف سایر زبان ها وجود ندارد ودرنتیجه در اینجا از همان دستور if-elif استفاده کرده ایم.

حال در ادامه نوبت به کار بر روی محیط گرافیکی (چارچوب) برنامه میرشد.

def year_label(label):
  def count1():
    label.config(text=nowYear())
    label.after(1000, count1)
  count1()

def month_label(label):
  def count2():
    label.config(text=nowMonth())
    label.after(1000, count2)
  count2()

def day_label(label):
  def count3():
    label.config(text=nowDay())
    label.after(1000, count3)
  count3()

def hour_label(label):
  def count4():
    label.config(text=nowHour())
    label.after(1000, count4)
  count4()

def minute_label(label):
  def count5():
    label.config(text=nowMinute())
    label.after(1000, count5)
  count5()

def second_label(label):
  def count6():
    label.config(text=nowSecond())
    label.after(1000, count6)
  count6()

توابع بالا مربوط به برچسب گذاری هرکدام از مولفه های زمان در محیط گرافیکی مورد نظر است که در هنگام فراخوانی آن ها به خوبی مشخص می شوند.

root = Tk()

root.mainloop()

اگر قصد ایجاد یک محیط گرافیکی داشته باشیم باید ابتدا این دو دستور یعنی تابع Tk() و سپس mainloop() نوشته شود و سرانجام توابع مورد نیاز برای محیط گرافیکی بین این دو دستور نوشته شوند.

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

#کدهای مورد نظر که در ادامه آورده شده است را در اینجا استفاده کنید.

time.sleep(1)
root.mainloop()

پس دستوراتی که در ادامه توضیح خواهیم داد به جای کامنتی که به فارسی نوشته شده است قرار دهید.

تابع sleep هم به عنوان ایجاد تاخیر استفاده شده است. زمانی که در داخل () نوشته شده است برحسب ثانیه است. البته چون در اینجا محیط گرافیکی را ایجاد کرده ایم وجود یا عدم وجود این تابع تاثیر در خروجی مورد نظرمان ندارد ولی درصورتی که از محیط گرافیکی استفاده نکنیم و صرفا بخواهیم خروجی را در python shell ببینیم باعث می شود که یه زمان ثابت چندین بار در خروجی چاپ شود.

def about():
   filewin = Toplevel(root)
   tx ="""
    Clock program 2014 - 
    by Pooria Taghdiri 
    saakhtani.ir 
    """
   message = Message(filewin, text=tx, relief = RIDGE , width = 170)
   message.pack(fill="both", expand="yes")
   

menubar = Menu(root)

filemenu = Menu(menubar, tearoff = 0)
filemenu.add_command(label="Exit", command = root.quit)
menubar.add_cascade(label="File", menu = filemenu)

helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label = "About...", command = about)
menubar.add_cascade(label = "Help", menu = helpmenu)

root.config(menu = menubar)

این قسمت از برنامه مربوط به ایجاد منو در برنامه می باشد (همانند خیلی از برنامه که در بالای آن ها منویی شامل File، Edit، View و Help وجود دارد). تابع about که تعریف شده است باعث می شود درصورتی که بروی گزینه ی about از منو help کلیک کنیم صفحه ای جدید باز شود و توضیحات مورد نظری که قبلا در برنامه نوشتیم را در صفحه ای جدید برای ما نشان دهد. یا با کلیک بر روی Exit از منوی File برنامه به طور کامل بسته می شود.

labelframe = LabelFrame(root, text="Time:" , font=("Ravie", 18))
labelframe.pack(fill="both", expand="yes")

hourLabel = Label(labelframe, relief = GROOVE, bd = 5,
                  width = 7,font=("Ravie", 15))
hourLabel.pack(side = LEFT, expand="yes")
hour_label(hourLabel)

colon = Label(labelframe, text = ":")
colon.pack(side = LEFT, expand="yes")

minuteLabel = Label(labelframe, text = nowMinute(),
                    relief = GROOVE, bd = 5, width = 7,font=("Ravie", 15))
minuteLabel.pack(side = LEFT, expand="yes")
minute_label(minuteLabel)

colon = Label(labelframe, text = ":")
colon.pack(side = LEFT, expand="yes")

secondLabel = Label(labelframe, text = nowSecond(),
                    relief = GROOVE, bd = 5, width = 7,font=("Ravie", 15))
secondLabel.pack(side = LEFT, expand="yes")
second_label(secondLabel)

این بخش از برنامه مربوط به قرار دادان زمان در صفحه مورد نظر مشخص کردن فونت اعداد، سایز فونت  حاشیه ی دور اعداد است. دستور label در واقع مربوط به برچسب گذاری مولفه ی مورد نظر و مشخص کردن مشخصات محلی که قرار است این مولفه در صفحه قرار بگیرد. (اگر فونت مورد نظر در اینجا Ravie بر روی سیستم شما نصب نباشد فونت پیش فرض به عنوان فونت موردنظر در برنامه استفاده می شود.)

labelframe1 = LabelFrame(root, text="Date:", font=("Ravie", 18))
labelframe1.pack(fill="both", expand="yes")

dayLabel = Label(labelframe1, text = nowSecond(),
                 relief = GROOVE, bd = 5, width = 7, font=("Ravie", 15))
dayLabel.pack(side = LEFT, expand="yes")
day_label(dayLabel)

monthLabel = Label(labelframe1, text = nowSecond(),
                   relief = GROOVE, bd = 5, width = 9, font=("Ravie", 15))
monthLabel.pack(side = LEFT, expand="yes")
month_label(monthLabel)

yearLabel = Label(labelframe1, text = nowSecond(),
                  relief = GROOVE, bd = 5, width = 7, font=("Ravie", 15))
yearLabel.pack(side = LEFT, expand="yes")
year_label(yearLabel)

این قسمت نیز مانند حالت قبل می باشد با این تفاوت که مربوط به مولفه های تاریخ یعنی روز، ماه و سال است.

در ساختنی بخوانید :
آموزش ساخت ساعت فیبوناچی با میکروکنترلر Atmega328P

البته می توان قسمت های مختلف را در فایل های مختلف نوشت و در آخر  در فایل اصلی برنامه آن ها را همانند کتابخانه فرخوانی کرد.

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

#!/usr/bin/python

#import the required libraries
import datetime
import time
from tkinter import *

#Functions for splitting the different components of date and time
def nowYear():
    now = datetime.datetime.now()
    year = now.year
    return str(year)

def nowMonth():
    now = datetime.datetime.now()
    month = now.month
    if month == 1:
        return "January"
    elif month == 2:
        return "February"
    elif month == 3:
        return "March"
    elif month == 4:
        return "April"
    elif month == 5:
        return "May"
    elif month == 6:
        return "June"
    elif month == 7:
        return "July"
    elif month == 8:
        return "August"
    elif month == 9:
        return "September"
    elif month == 10:
        return "October"
    elif month == 11:
        return "November"
    elif month == 12:
        return "December"

def nowDay():
    now = datetime.datetime.now()
    day = now.day
    return str(day)

def nowHour():
    now = datetime.datetime.now()
    hour = now.hour
    return str(hour)

def nowMinute():
    now = datetime.datetime.now()
    minute = now.minute
    return str(minute)

def nowSecond():
    now = datetime.datetime.now()
    second = now.second 
    return str(second)

########################################################
######################FRAMEWORK#########################
########################################################

def year_label(label):
  def count1():
    label.config(text=nowYear())
    label.after(1000, count1)
  count1()

def month_label(label):
  def count2():
    label.config(text=nowMonth())
    label.after(1000, count2)
  count2()

def day_label(label):
  def count3():
    label.config(text=nowDay())
    label.after(1000, count3)
  count3()

def hour_label(label):
  def count4():
    label.config(text=nowHour())
    label.after(1000, count4)
  count4()

def minute_label(label):
  def count5():
    label.config(text=nowMinute())
    label.after(1000, count5)
  count5()

def second_label(label):
  def count6():
    label.config(text=nowSecond())
    label.after(1000, count6)
  count6()

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

#############################Menu################################
def about():
   filewin = Toplevel(root)
   tx ="""
    Clock program 2014 - 
    by Pooria Taghdiri 
    saakhtani.ir 
    """
   message = Message(filewin, text=tx, relief = RIDGE , width = 170)
   message.pack(fill="both", expand="yes")
   

menubar = Menu(root)

filemenu = Menu(menubar, tearoff = 0)
filemenu.add_command(label="Exit", command = root.quit)
menubar.add_cascade(label="File", menu = filemenu)

helpmenu = Menu(menubar, tearoff=0)
helpmenu.add_command(label = "About...", command = about)
menubar.add_cascade(label = "Help", menu = helpmenu)

root.config(menu = menubar)

#############################TIME################################
labelframe = LabelFrame(root, text="Time:" , font=("Ravie", 18))
labelframe.pack(fill="both", expand="yes")

hourLabel = Label(labelframe, relief = GROOVE, bd = 5,
                  width = 7,font=("Ravie", 15))
hourLabel.pack(side = LEFT, expand="yes")
hour_label(hourLabel)

colon = Label(labelframe, text = ":")
colon.pack(side = LEFT, expand="yes")

minuteLabel = Label(labelframe, text = nowMinute(),
                    relief = GROOVE, bd = 5, width = 7,font=("Ravie", 15))
minuteLabel.pack(side = LEFT, expand="yes")
minute_label(minuteLabel)

colon = Label(labelframe, text = ":")
colon.pack(side = LEFT, expand="yes")

secondLabel = Label(labelframe, text = nowSecond(),
                    relief = GROOVE, bd = 5, width = 7,font=("Ravie", 15))
secondLabel.pack(side = LEFT, expand="yes")
second_label(secondLabel)

#############################DATE################################
labelframe1 = LabelFrame(root, text="Date:", font=("Ravie", 18))
labelframe1.pack(fill="both", expand="yes")

dayLabel = Label(labelframe1, text = nowSecond(),
                 relief = GROOVE, bd = 5, width = 7, font=("Ravie", 15))
dayLabel.pack(side = LEFT, expand="yes")
day_label(dayLabel)

monthLabel = Label(labelframe1, text = nowSecond(),
                   relief = GROOVE, bd = 5, width = 9, font=("Ravie", 15))
monthLabel.pack(side = LEFT, expand="yes")
month_label(monthLabel)

yearLabel = Label(labelframe1, text = nowSecond(),
                  relief = GROOVE, bd = 5, width = 7, font=("Ravie", 15))
yearLabel.pack(side = LEFT, expand="yes")
year_label(yearLabel)

#################################################################
time.sleep(1)
root.mainloop()

 

در ساختنی بخوانید :
آموزش ساخت: یک آینه تزئینی بی نهایت بسازید !

البته توجه شود توضیح تک تک دستورات در یک تاپیک کمی مشکل و خسته کننده است. هدف در این جا بیشتر ترغیب به منظور یادگیری زبان های برنامه نویسی است و استفاده از این کدها و تغییر آن به دلخواه خود شماست. پس با نظرات خود ما را در بهبود این بخش یاری فرمایید. اگر انتقادی و یا پیشنهادی در این زمینه دارید خوشحال می شویم که با ما،  آن را درمیان بگذارید.

برای اطلاعات بیشتر از دستورات مختلف نیز می توانید به خود سایت پایتونیا به اینجا مراجعه کنید.

3 دیدگاه‌ها

  1. سلام
    خیلی وب عالی بود ؛ منکه لذت بردم البته نه از این بخش زبان پایتون! بلکه از همه آموزش ها حتی آموزش ساخت اجاق پیکنیکی! امیدوارم به کارتون ادامه بدید و یکی از بزرگترین وب های دنیا بشین.
    اگر هم کمکی از دست یه مهندس برق بر میاد ؛ من در خدمتم !