from tkinter import*

win=Tk() #this is to create a basic window
win.geometry("312x324") # this is for the size of the window
win.resizable(0,0) #this is to prevent from resizing the window
win.title("Calculator")

###########staring with function ########
#'btn_click'function:
#this function whenever you enters a number
#input field whenever you enter a number
def btn_click(item):
    global expression #we use global keyword to read and write a global variable inside a function
    expression=expression+str(item)
    input_text.set(expression)

#'bt_clear' function:this is used to clear
    #the input field
def bt_clear():
        global expression
        expression=""
        input_text.set("")

#'bt_equal'=this method calculates the expression
#present in input field

def bt_equal():
    global expression
    result=str(eval(expression)) #'eval':this function is used to evaluate the string expression directly
    input_text.set(result)
    expression=""

expression=""


#'string Var() ':it is used to get the instance of input field
input_text=StringVar()
    
#let us creating a frame for the input field

input_frame=Frame(win,width=312,height=50,bd=0,highlightbackground="black")#,hightlightcolor="black",hightlightthickness=2)
input_frame.pack(side=TOP)

#let us create a input field inside the frame
input_field=Entry(input_frame,font=("arial",18,"bold"),textvariable=input_text,width=50,bg="#eee",bd=0,justify=RIGHT)
input_field.grid(row=0,column=0)
input_field.pack(ipady=10) #'ipady'is internal padding to increase the height ofinout field


#let us creating another 'Frame ' for the button below the input_frame'
btns_frame=Frame(win,width=312,height=272.5,bg="grey")
btns_frame.pack()
#first row
clear = Button(btns_frame,text="C",fg="black", width=32, height=3, bd=0, bg="#eee",cursor="hand2",command=lambda:bt_clear()).grid(row=0,column=0,columnspan=3,padx=1,pady=1)
divide = Button(btns_frame,text="/",fg="black",width=10,height=3,bd=0,bg="#eee",cursor="hand2",command=lambda:btn_click("/")).grid(row=0,column=3,padx=1,pady=1)
#second row

seven=Button(btns_frame,text="7",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(7)).grid(row=1,column=0,padx=1,pady=1)
eight=Button(btns_frame,text="8",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(8)).grid(row=1,column=1,padx=1,pady=1)
nine=Button(btns_frame,text="9",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(9)).grid(row=1,column=2,padx=1,pady=1)
multiply=Button(btns_frame,text="*",fg="black",width=10,height=3,bd=0,bg="#eee",cursor="hand2",command=lambda:btn_click("*")).grid(row=1,column=3,padx=1,pady=1)
#third row
four=Button(btns_frame,text="4",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(4)).grid(row=2,column=0,padx=1,pady=1)
five=Button(btns_frame,text="5",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(5)).grid(row=2,column=1,padx=1,pady=1)
six=Button(btns_frame,text="6",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(6)).grid(row=2,column=2,padx=1,pady=1)
minus=Button(btns_frame,text="-",fg="black",width=10,height=3,bd=0,bg="#eee",cursor="hand2",command=lambda:btn_click("-")).grid(row=2,column=3,padx=1,pady=1)

#fourth row
one=Button(btns_frame,text="1",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(1)).grid(row=3,column=0,padx=1,pady=1)
tow=Button(btns_frame,text="2",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(2)).grid(row=3,column=1,padx=1,pady=1)
three=Button(btns_frame,text="3",fg="black",width=10,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(3)).grid(row=3,column=2,padx=1,pady=1)
plus=Button(btns_frame,text="+",fg="black",width=10,height=3,bd=0,bg="#eee",cursor="hand2",command=lambda:btn_click("+")).grid(row=3,column=3,padx=1,pady=1)

#fifth row
zero=Button(btns_frame,text="0",fg="black",width=21,height=3,bd=0,bg="#fff",cursor="hand2",command=lambda:btn_click(0)).grid(row=4,column=0,columnspan=2,padx=1,pady=1)
point=Button(btns_frame,text=".",fg="black",width=10,height=3,bd=0,bg="#eee",cursor="hand2",command=lambda:btn_click(".")).grid(row=4,column=2,padx=1,pady=1)
equal=Button(btns_frame,text="=",fg="black",width=10,height=3,bd=0,bg="#eee",cursor="hand2",command=lambda:bt_equal()).grid(row=4,column=3,padx=1,pady=1)

win.mainloop()


top.mainloop()
