پروژه ساخت ماشین حساب با پایتون
برنامه ماشین حساب در پایتون – پروژه ماشین حساب پایتون، یکی از پروژه های ساده پایتون می باشد که برای شروع برنامه نویسی پروژه محور می توانید برای شما مفید باشد. ماشین حساب یکی از برنامه های کاربردی است که همه ما در زندگی روزمره خود از آن استفاده می کنیم. اگر می خواهید با برنامه نویسی در پایتون به صورت پروژه محور کار کنید، پروژه ساخت ماشین حساب با پایتون، پروژه ای است که در عین سادگی، بسیار کاربردی و مفید است. امروز، ما قصد داریم یک ماشین حساب پایتون با استفاده از Tkinter با مراحل آسان بسازیم.
Tkinter چیست؟
پایتون ابزارهای مختلفی را برای طراحی رابط کاربری گرافیکی wiz GUI ارائه می دهد و یکی از این ابزارها Tkinter است که بیشتر مورد استفاده قرار می گیرد. این در واقع یکی از سریع ترین و ساده ترین راه ها برای ساخت برنامه رابط کاربری گرافیکی است. علاوه بر این، Tkinter چند پلتفرم است، از این رو همان کد روی macOS، ویندوز و لینوکس کار می کند.
قبل از اینکه کار را شروع کنیم، در صورتی که هنوز دوره آموزش برنامه نویسی پایتون را مشاهده نکرده اید، پیشنهاد می کنید این دوره را از سایت امیر رسولی دریافت کنید و مشاهده آن را در اولویت بگذارید.
برنامه نویسی پروژه ماشین حساب پایتون
ماشین حساب پایتون که می خواهیم بسازیم چیزی شبیه به تصویر زیر خواهد بود:
مرحله 1: وارد کردن ماژول های لازم
برای استفاده از Tkinter باید ماژول Tkinter را وارد کنیم. ما همچنین قصد داریم تابع فاکتوریل را از ماژول ریاضی وارد کنیم.
from tkinter import *
import parser
from math import factorial
مرحله 2: ایجاد یک پنجره برای ماشین حساب
اکنون میخواهیم پنجرهای را برای ماشین حساب خود پیشنویس کنیم که دکمهها را در خود جای میدهد.
root = Tk()
root.title(‘DataFlair – Calculator’)
root.mainloop()
کد بالا عنوان پنجره ماشین حساب پایتون را به عنوان “DataFlair – Calculator” تنظیم می کند. وقتی کد بالا را اجرا می کنید، پنجره ای مانند این خواهید داشت.
مرحله 3: طراحی دکمه ها
حالا بیایید به سرعت دکمه های ماشین حساب خود را طراحی کنیم و آنها را در پنجره برنامه خود قرار دهیم.
#adding the input field
display = Entry(root)
display.grid(row=1,columnspan=6,sticky=N+E+W+S)
#Code to add buttons to the Calculator
Button(root,text=”1″,command = lambda :get_variables(1)).grid(row=2,column=0, sticky=N+S+E+W)
Button(root,text=” 2″,command = lambda :get_variables(2)).grid(row=2,column=1, sticky=N+S+E+W)
Button(root,text=” 3″,command = lambda :get_variables(3)).grid(row=2,column=2, sticky=N+S+E+W)
Button(root,text=”4″,command = lambda :get_variables(4)).grid(row=3,column=0, sticky=N+S+E+W)
Button(root,text=” 5″,command = lambda :get_variables(5)).grid(row=3,column=1, sticky=N+S+E+W)
Button(root,text=” 6″,command = lambda :get_variables(6)).grid(row=3,column=2, sticky=N+S+E+W)
Button(root,text=”7″,command = lambda :get_variables(7)).grid(row=4,column=0, sticky=N+S+E+W)
Button(root,text=” 8″,command = lambda :get_variables(8)).grid(row=4,column=1, sticky=N+S+E+W)
Button(root,text=” 9″,command = lambda :get_variables(9)).grid(row=4,column=2, sticky=N+S+E+W)
#adding other buttons to the calculator
Button(root,text=”AC”,command=lambda :clear_all()).grid(row=5,column=0, sticky=N+S+E+W)
Button(root,text=” 0″,command = lambda :get_variables(0)).grid(row=5,column=1, sticky=N+S+E+W)
Button(root,text=” .”,command=lambda :get_variables(“.”)).grid(row=5, column=2, sticky=N+S+E+W)
Button(root,text=”+”,command= lambda :get_operation(“+”)).grid(row=2,column=3, sticky=N+S+E+W)
Button(root,text=”-“,command= lambda :get_operation(“-“)).grid(row=3,column=3, sticky=N+S+E+W)
Button(root,text=”*”,command= lambda :get_operation(“*”)).grid(row=4,column=3, sticky=N+S+E+W)
Button(root,text=”/”,command= lambda :get_operation(“/”)).grid(row=5,column=3, sticky=N+S+E+W)
# adding new operations
Button(root,text=”pi”,command= lambda :get_operation(“*3.14”)).grid(row=2,column=4, sticky=N+S+E+W)
Button(root,text=”%”,command= lambda :get_operation(“%”)).grid(row=3,column=4, sticky=N+S+E+W)
Button(root,text=”(“,command= lambda :get_operation(“(“)).grid(row=4,column=4, sticky=N+S+E+W)
Button(root,text=”exp”,command= lambda :get_operation(“**”)).grid(row=5,column=4, sticky=N+S+E+W)
Button(root,text=”<-“,command= lambda :undo()).grid(row=2,column=5, sticky=N+S+E+W)
Button(root,text=”x!”, command= lambda: fact()).grid(row=3,column=5, sticky=N+S+E+W)
Button(root,text=”)”,command= lambda :get_operation(“)”)).grid(row=4,column=5, sticky=N+S+E+W)
Button(root,text=”^2″,command= lambda :get_operation(“**2”)).grid(row=5,column=5, sticky=N+S+E+W)
Button(root,text=”^2″,command= lambda :get_operation(“**2”)).grid(row=5,column=5, sticky=N+S+E+W)
Button(root,text=”=”,command= lambda :calculate()).grid(columnspan=6, sticky=N+S+E+W)
توضیح:
در این برنامه ماشین حساب در پایتون، تابع “Entry” به ایجاد یک فیلد ورودی متن کمک می کند و ما از روش .grid() برای تعیین موقعیت مرتبط با دکمه یا فیلد ورودی استفاده می کنیم. ما از روش دکمه برای نمایش یک دکمه در پنجره برنامه خود استفاده می کنیم.
- root – نامی که با آن به پنجره خود اشاره می کنیم
- text- متنی که روی دکمه نمایش داده می شود
- Row – شاخص ردیف شبکه
- Column – شاخص ستون شبکه
- columnspan – تعداد ستون ها را در بر می گیرد یا ترکیب می کند
- Sticky – اگر سلول حاصل بزرگتر از ویجت باشد، چسبنده نحوه گسترش ویجت را مشخص می کند. ترکیب ثابت های مورد استفاده S، N، E و W، یا NW، NE، SW و SE مشابه جهت های قطب نما هستند. N+E+W+S به این معنی است که ویجت باید در همه جهات گسترش یابد
وقتی کد بالا را اجرا می کنید، خروجی ماشین حساب را به این صورت دریافت خواهید کرد.
توجه داشته باشید:
اگر متوجه خطایی مانند عدم یافتن تابع get_variable() شده اید، نگران نباشید. ما فقط یک تابع عمل مرتبط با هر دکمه را تعریف می کنیم. از آنجایی که ما به تازگی آنها را صدا زده ایم و هنوز آنها را اعلام نکردهایم، از این رو خطا وجود دارد. حال، اجازه می دهد تا آن توابع را تعریف کنیم.
برای اتصال دکمه رقمی به تابع get_variable() از پارامتر “command” استفاده می کنیم. در اینجا با فشردن دکمه 1 به عنوان آرگومان به تابع get_variable() ارسال می کنیم.
مرحله 4: نگاشت دکمه ها به عملکرد آنها
نقشه برداری ارقام
# i keeps the track of current position on the input text field
i = 0
# Receives the digit as parameter and display it on the input field
def get_variables(num):
global i
display.insert(i,num)
i+=1
تابع get_variable() رقم را به عنوان پارامتر دریافت می کند. این رقم با متد .insert() با پارامترهای ‘i’ و ‘num’ به فیلد ورودی وارد می شود. متغیر سراسری i هر بار افزایش می یابد تا با موقعیت درج رقم بعدی یا عملگر بعدی به روز شود.
- i – موقعیت درج رقم
- num – رقم
- نقشه برداری از دکمه های اپراتور
def get_operation(operator):
global i
length = len(operator)
display.insert(i,operator)
i+=length
توضیح:
تابع get_operation() عملگر را به عنوان پارامتر دریافت می کند که سپس در قسمت متنی در موقعیت ith ماشین حساب پایتون درج می شود.
نگاشت دکمه AC
def clear_all():
display.delete(0,END)
توضیح:
ما از متد .delete() برای حذف کاراکترهای فیلد متنی استفاده می کنیم. موقعیت شروع و پایان را به عنوان پارامتر می پذیرد.
- 0 – موقعیت شروع
- END – موقعیت انتهایی
- نقشه برداری از دکمه لغو
def undo():
entire_string = display.get()
if len(entire_string):
new_string = entire_string[:-1]
clear_all()
display.insert(0,new_string)
else:
clear_all()
display.insert(0,”Error”)
توضیح:
ما از متد .get() برای واکشی رشته موجود در فیلد ورودی استفاده می کنیم. اگر واقعاً رشتهای وجود دارد، آخرین کاراکتر را برش میزنیم، فیلد ورودی را پاک میکنیم و رشته جدید را به فیلد ورودی که حاوی آخرین کاراکتر نیست برمیگردانیم.
نگاشت دکمه “=”.
def calculate():
entire_string = display.get()
try:
a = parser.expr(entire_string).compile()
result = eval(a)
clear_all()
display.insert(0,result)
except Exception:
clear_all()
display.insert(0,”Error”)
توضیح:
رشته موجود در فیلد ورودی را با استفاده از متد .get() واکشی می کنیم. ما اکنون از ماژول تجزیه برای اسکن رشته با کمک متد ()expr استفاده می کنیم که رشته را به عنوان پارامتر می پذیرد. ما اساسا آن را به تجزیه کننده واگذار می کنیم تا یک درخت نحو انتزاعی از رشته بسازد که با استفاده از تابع ()eval ارزیابی می شود.
پس از به دست آوردن نتیجه، آن را پس از پاک کردن به قسمت ورودی فشار می دهیم.
نگاشت کلید فاکتوریل
def fact():
entire_string = display.get()
try:
result = factorial(int(entire_string))
clear_all()
display.insert(0,result)
except Exception:
clear_all()
display.insert(0,”Error”)
رشته را از فیلد ورودی واکشی می کنیم. رشته را به نوع int تبدیل می کنیم و آن را به تابع فاکتوریل که در ابتدا وارد کرده بودیم ارسال می کنیم. پس از آن فیلد ورودی را پاک می کنیم و نتیجه را به قسمت ورودی فشار می دهیم. با پاک کردن فیلد ورودی و سپس فشار دادن یک پیام خطا در فیلد ورودی، با هر استثنا برخورد می کنیم.
صفحه های نهایی ماشین حساب پایتون
هنگامی که این برنامه ماشین حساب را در پایتون اجرا می کنید، صفحه های زیر را خواهید دید:
جمع بندی
ما با موفقیت یک ماشین حساب پایتون را با tkinter طراحی کرده ایم. این بدان معنی است که شما درک بهتری از روش استفاده از tkinter برای ساخت برنامه های رابط کاربری گرافیکی دارید. جدا از این، اکنون می توانید با ایجاد یک برگه تاریخچه که محاسبات قبلی را ردیابی می کند یا اضافه کردن یک تصویر پس زمینه به ماشین حساب، یک قدم به جلو برای توسعه پروژه بردارید.
جدای از این، پیشنهاد میکنیم پروژههای مشابه دیگری مانند فهرست کارها، برنامه آزمون، بازی تیک تاک را امتحان کنید تا به نحوهای مختلف پیشنهادات tkinter دست پیدا کنید.
دیدگاهتان را بنویسید