Welcome folks today in this blog post we will be building a mini calculator
in tkinter using python. All the full source code of the application will be given below.
Get Started
In order to get started make an app.py
file and copy paste the following code
app.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# importing Tkinter and math from tkinter import * import math # calc class class calc: def getandreplace(self): """replace x with * and � with /""" self.expression = self.e.get() self.newtext=self.expression.replace('/','/') self.newtext=self.newtext.replace('x','*') def equals(self): """when the equal button is pressed""" self.getandreplace() try: # evaluate the expression using the eval function self.value= eval(self.newtext) except SyntaxError or NameError: self.e.delete(0,END) self.e.insert(0,'Invalid Input!') else: self.e.delete(0,END) self.e.insert(0,self.value) def squareroot(self): """squareroot method""" self.getandreplace() try: # evaluate the expression using the eval function self.value= eval(self.newtext) except SyntaxError or NameError: self.e.delete(0,END) self.e.insert(0,'Invalid Input!') else: self.sqrtval=math.sqrt(self.value) self.e.delete(0,END) self.e.insert(0,self.sqrtval) def square(self): """square method""" self.getandreplace() try: #evaluate the expression using the eval function self.value= eval(self.newtext) except SyntaxError or NameError: self.e.delete(0,END) self.e.insert(0,'Invalid Input!') else: self.sqval=math.pow(self.value,2) self.e.delete(0,END) self.e.insert(0,self.sqval) def clearall(self): """when clear button is pressed,clears the text input area""" self.e.delete(0,END) def clear1(self): self.txt=self.e.get()[:-1] self.e.delete(0,END) self.e.insert(0,self.txt) def action(self,argi): """pressed button's value is inserted into the end of the text area""" self.e.insert(END,argi) def __init__(self,master): """Constructor method""" master.title('Calulator') master.geometry() self.e = Entry(master) self.e.grid(row=0,column=0,columnspan=6,pady=3) self.e.focus_set() #Sets focus on the input text area # Generating Buttons Button(master,text="=",width=11,height=3,fg="blue", bg="orange",command=lambda:self.equals()).grid( row=4, column=4,columnspan=2) Button(master,text='AC',width=5,height=3, fg="red", bg="light green", command=lambda:self.clearall()).grid(row=1, column=4) Button(master,text='C',width=5,height=3, fg="red",bg="light green", command=lambda:self.clear1()).grid(row=1, column=5) Button(master,text="+",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action('+')).grid(row=4, column=3) Button(master,text="x",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action('x')).grid(row=2, column=3) Button(master,text="-",width=5,height=3, fg="red",bg="light green", command=lambda:self.action('-')).grid(row=3, column=3) Button(master,text="�",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action('/')).grid(row=1, column=3) Button(master,text="%",width=5,height=3, fg="red",bg="light green", command=lambda:self.action('%')).grid(row=4, column=2) Button(master,text="7",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action('7')).grid(row=1, column=0) Button(master,text="8",width=5,height=3, fg="red",bg="light green", command=lambda:self.action(8)).grid(row=1, column=1) Button(master,text="9",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action(9)).grid(row=1, column=2) Button(master,text="4",width=5,height=3, fg="red",bg="light green", command=lambda:self.action(4)).grid(row=2, column=0) Button(master,text="5",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action(5)).grid(row=2, column=1) Button(master,text="6",width=5,height=3, fg="white",bg="blue", command=lambda:self.action(6)).grid(row=2, column=2) Button(master,text="1",width=5,height=3, fg="red",bg="light green", command=lambda:self.action(1)).grid(row=3, column=0) Button(master,text="2",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action(2)).grid(row=3, column=1) Button(master,text="3",width=5,height=3, fg="white",bg="blue", command=lambda:self.action(3)).grid(row=3, column=2) Button(master,text="0",width=5,height=3, fg="white",bg="blue", command=lambda:self.action(0)).grid(row=4, column=0) Button(master,text=".",width=5,height=3, fg="red",bg="light green", command=lambda:self.action('.')).grid(row=4, column=1) Button(master,text="(",width=5,height=3, fg="white",bg="blue", command=lambda:self.action('(')).grid(row=2, column=4) Button(master,text=")",width=5,height=3, fg="blue",bg="orange", command=lambda:self.action(')')).grid(row=2, column=5) Button(master,text="?",width=5,height=3, fg="red",bg="light green", command=lambda:self.squareroot()).grid(row=3, column=4) Button(master,text="x�",width=5,height=3, fg="white",bg="blue", command=lambda:self.square()).grid(row=3, column=5) # Driver Code root = Tk() obj=calc(root) # object instantiated root.mainloop() |
Now if you execute the python
script app.py by typing the below command as shown below
python app.py