# Scientific calculator with python

**URL:** <https://community.thunkable.com/t/scientific-calculator-with-python/1252419>\
**Category:** Off Topic\
**Created:** [April 29, 2021, 9:31am UTC](https://community.thunkable.com/t/scientific-calculator-with-python/1252419 "2021-04-29T09:31:20Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![codeemaker](https://sea1.discourse-cdn.com/flex015/user_avatar/community.thunkable.com/codeemaker/32/101762_2.png) [@codeemaker](https://community.thunkable.com/u/codeemaker)\
**Post date:** [April 29, 2021, 9:31am UTC](https://community.thunkable.com/t/scientific-calculator-with-python/1252419/1 "2021-04-29T09:31:21Z")

</div>

This is my scientific calculator.  
Can we do a written code wdc??  
from tkinter import\*  
import math  
import parser  
import tkinter.messagebox

root = Tk()  
root.title(“Scientific Calculator”)  
root.configure(bg=“black”)  
root.resizable(width=False, height=False)  
root.geometry(“480x568+0+0”)

calc = Frame(root)  
calc.grid()

#=============Functions==================================================================================================

class Calc():  
def **init** (self):  
self.total=0  
self.current=""  
self.input\_value=True  
self.check\_sum=False  
self.op=""  
self.result=False  
def numberEnter(self, num):  
self.result=False  
firstnum=txtDisplay.get()  
secondnum=str(num)  
if self.input\_value:  
self.current=secondnum  
self.input\_value=False  
else:  
if secondnum==’.’:  
if secondnum in firstnum:  
return  
self.current=firstnum+secondnum  
self.display(self.current)

```
def sum_of_total(self):
    self.result=True
    self.current=float(self.current)
    if self.check_sum==True:
        self.valid_function()
    else:
        self.total=float(txtDisplay.get())

def valid_function(self):
    if self.op=="add":
        self.total+=self.current
    if self.op=="sub":
        self.total-=self.current
    if self.op=="multi":
        self.total*=self.current
    if self.op=="divide":
        self.total/=self.current    
    if self.op=="mod":
        self.total%=self.current
    if self.op=="inv":
        self.total=1/self.current
    self.input_value=True
    self.check_sum=False
    self.display(self.total)
    
def operation(self, op):
    self.current=float(self.current)
    if self.check_sum:
        self.valid_function()
    elif not self.result:
        self.total=self.current
        self.input_value=True
    self.check_sum=True
    self.op=op
    self.result=False

def Clear_Entry(self):
    self.result=False
    self.current="0"
    self.display(0)
    self.input_value=True

def all_Clear_Entry(self):
    self.Clear_Entry()
    self.total=0

def tanh(self):
    self.reult=False
    self.current=math.tanh(math.radians(float(txtDisplay.get())))
    self.display(self.current)

def tan(self):
    self.reult=False
    self.current=math.tan(math.radians(float(txtDisplay.get())))
    self.display(self.current)
    
def sinh(self):
    self.reult=False
    self.current=math.sinh(math.radians(float(txtDisplay.get())))
    self.display(self.current)
    
def sin(self):
    self.reult=False
    self.current=math.sin(math.radians(float(txtDisplay.get())))
    self.display(self.current)
    
def log(self):
    self.reult=False
    self.current=math.log(float(txtDisplay.get()))
    self.display(self.current)
    
def exp(self):
    self.reult=False
    self.current=math.exp(float(txtDisplay.get()))
    self.display(self.current)
    
def mathsPM(self):
    self.reult=False
    self.current=-(float(txtDisplay.get()))
    self.display(self.current)

def squared(self):
    self.reult=False
    self.current=math.sqrt(float(txtDisplay.get()))
    self.display(self.current)
    
def cos(self):
    self.reult=False
    self.current=math.cos(math.radians(float(txtDisplay.get())))
    self.display(self.current)
    
def cosh(self):
    self.reult=False
    self.current=math.cosh(math.radians(float(txtDisplay.get())))
    self.display(self.current)

def display(self, value):
    txtDisplay.delete(0, END)
    txtDisplay.insert(0, value)

def pi(self):
    self.reult=False
    self.current=math.pi
    self.display(self.current)

def tau(self):
    self.reult=False
    self.current=math.tau
    self.display(self.current)
    
def e(self):
    self.reult=False
    self.current=math.e
    self.display(self.current)

def acosh(self):
    self.result=False
    self.current=math.acosh(float(txtDisplay.get()))
    self.display(self.current)

def asinh(self):
    self.result=False
    self.current=math.asinh(float(txtDisplay.get()))
    self.display(self.current)

def expm1(self):
    self.result=False
    self.current=math.expm1(float(txtDisplay.get()))
    self.display(self.current)

def lgamma(self):
    self.result=False
    self.current=math.lgamma(float(txtDisplay.get()))
    self.display(self.current)

def degrees(self):
    self.result=False
    self.current=math.degrees(float(txtDisplay.get()))
    self.display(self.current)

def log2(self):
    self.result=False
    self.current=math.log2(float(txtDisplay.get()))
    self.display(self.current)

def log10(self):
    self.result=False
    self.current=math.log10(float(txtDisplay.get()))
    self.display(self.current)

def log1p(self):
    self.result=False
    self.current=math.log1p(float(txtDisplay.get()))
    self.display(self.current)

```

def inv(self):  
self.result=False  
self.current=math  
self.display(self.current)  
def perc(self):  
self.result=False  
self.current=(float(txtDisplay.get()))/100  
self.display(self.current)  
def expo(self):  
self.result=False  
self.display(self.current)  
def square(self):  
self.result=False  
self.current=(float(txtDisplay.get()))\*(float(txtDisplay.get()))  
self.display(self.current)

added\_value=Calc()

#================Display================================================================================================

txtDisplay = Entry(calc, relief=SUNKEN, font=(‘arial’, 20, ‘bold’),fg=“white”, bg=“black”, bd=30, width=28, justify=RIGHT)  
txtDisplay.grid(row=0, column=0, columnspan=4, pady=1)  
txtDisplay.insert(0, “0”)

#==================Numbers==============================================================================================

numberpad = “789456123”  
i=0  
btn=  
for j in range(2,5):  
for k in range(3):  
btn.append(Button(calc, width=6, height=2, font=(‘arial’, 20, ‘bold’),fg=“white”,bg=“black”, bd=4, text=numberpad[i]))  
btn[i].grid(row=j, column=k, pady=1)  
btn[i][“command”]=lambda x=numberpad[i]: added\_value.numberEnter(x)  
i+=1

#========================Standard Function==============================================================================================================================================

btnClear=Button(calc, text=chr(67), width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.Clear\_Entry).grid(row=1, column=0, pady=1)  
btnAllClear=Button(calc, text=chr(67)+chr(69), width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, fg=“white”,bg=“black”, command=added\_value.all\_Clear\_Entry).grid(row=1, column=1, pady=1)

btnSq=Button(calc, text=“√”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”, fg=“white”,command=added\_value.squared).grid(row=1, column=2, pady=1)  
btnAdd=Button(calc, text="+", width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=lambda:added\_value.operation(“add”)).grid(row=1, column=3, pady=1)

btnSub=Button(calc, text="-", width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=lambda:added\_value.operation(“sub”)).grid(row=2, column=3, pady=1)  
btnMult=Button(calc, text=“×”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”, fg=“white”,command=lambda:added\_value.operation(“multi”)).grid(row=3, column=3, pady=1)

btnDiv=Button(calc, text=chr(247), width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=lambda:added\_value.operation(“divide”)).grid(row=4, column=3, pady=1)  
btnZero=Button(calc, text=“0”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=lambda:added\_value.numberEnter(0)).grid(row=5, column=0, pady=1)

btnDot=Button(calc, text=".", width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=lambda:added\_value.numberEnter(".")).grid(row=5, column=1, pady=1)  
btnPM=Button(calc, text=chr(177), width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.mathsPM).grid(row=5, column=2, pady=1)

btnEquals=Button(calc, text="=", width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.sum\_of\_total).grid(row=5, column=3, pady=1)

#===================Scientific Calculator====================================================================================================================================================

btnPi=Button(calc, text=‘π’, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.pi).grid(row=1, column=4, pady=1)  
btnCos=Button(calc, text=“cos”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.cos).grid(row=1, column=5, pady=1)

btnTan=Button(calc, text=“tan”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.tan).grid(row=1, column=6, pady=1)  
btnSin=Button(calc, text=“sin”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.sin).grid(row=1, column=7, pady=1)

btn2Pi=Button(calc, text=‘2π’, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.tau).grid(row=2, column=4, pady=1)  
btnCosh=Button(calc, text=“cosh”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.cosh).grid(row=2, column=5, pady=1)

btnTanh=Button(calc, text=“tanh”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.tanh).grid(row=2, column=6, pady=1)  
btnSinh=Button(calc, text=“sinh”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”, fg=“white”,command=added\_value.sinh).grid(row=2, column=7, pady=1)

btnLog=Button(calc, text=‘log’, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.log).grid(row=3, column=4, pady=1)  
btninv=Button(calc, text=“Inv”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=lambda:added\_value.operation(“inv”)).grid(row=3, column=5, pady=1)

btnMod=Button(calc, text=“Mod”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4,fg=“white”,bg=“black”, command=lambda:added\_value.operation(“mod”)).grid(row=3, column=6, pady=1)  
btnE=Button(calc, text=“e”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, bg=“black”,fg=“white”, command=added\_value.e).grid(row=3, column=7, pady=1)

btnLog2=Button(calc, text=‘log2’, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4,fg=“white”, bg=“black”, command=added\_value.log2).grid(row=4, column=4, pady=1)  
btnDeg=Button(calc, text=“deg”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4,fg=“white”, bg=“black”, command=added\_value.degrees).grid(row=4, column=5, pady=1)

btnAcosh=Button(calc, text=“acosh”, width=6, height=2, font=(‘arial’, 20, ‘bold’),fg=“white”, bd=4, bg=“black”, command=added\_value.acosh).grid(row=4, column=6, pady=1)  
btnAsinh=Button(calc, text=“asinh”, width=6, height=2, font=(‘arial’, 20, ‘bold’),fg=“white”, bd=4, bg=“black”, command=added\_value.asinh).grid(row=4, column=7, pady=1)

btnLog10=Button(calc, text=‘log10’, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4,fg=“white”, bg=“black”, command=added\_value.log10).grid(row=5, column=4, pady=1)  
btnLog1p=Button(calc, text=“log1p”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4,fg=“white”, bg=“black”, command=added\_value.log1p).grid(row=5, column=5, pady=1)

btnExpm1=Button(calc, text=“expm1”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4, fg=“white”,bg=“black”, command=added\_value.expm1).grid(row=5, column=6, pady=1)  
btnLgamma=Button(calc, text=“lgamma”, width=6, height=2, font=(‘arial’, 20, ‘bold’), bd=4,fg=“white”, bg=“black”, command=added\_value.lgamma).grid(row=5, column=7, pady=1)

#===============================Display Text======================================================================================================================================

lblDisplay = Label(calc, text = “Scientific Calculator”,font=(‘Helvetica’,30,‘bold’),  
bg=‘black’,fg=‘white’,justify=CENTER)  
lblDisplay.grid(row=0, column= 4,columnspan=4)

#=======================Menu and function===========================================================  
def iExit():  
iExit = tkinter.messagebox.askyesno(“Scientific Calculator”, “Confirm if you want to exit”)  
if iExit\>0:  
root.destroy()  
return

def Scientific():  
root.resizable(width=False, height=False)  
root.geometry(“944x568+20+20”)

def Standard():  
root.resizable(width=False, height=False)  
root.geometry(“480x568+20+20”)

menubar = Menu(calc)

filemenu = Menu(menubar, tearoff=0)  
menubar.add\_cascade(label = “File”, menu=filemenu)  
filemenu.add\_command(label = “Standard”, command = Standard)  
filemenu.add\_command(label = “Scientific”, command = Scientific)  
filemenu.add\_separator()  
filemenu.add\_command(label = “Exit”, command = iExit)

#====================Main Loop=============================================================================

root.config(menu=menubar)  
root.mainloop()

---

<div class="post-metadata">

**Author:** ![ioannis](https://sea1.discourse-cdn.com/flex015/user_avatar/community.thunkable.com/ioannis/32/146956_2.png) [@ioannis](https://community.thunkable.com/u/ioannis)\
**Post date:** [November 8, 2024, 1:22pm UTC](https://community.thunkable.com/t/scientific-calculator-with-python/1252419/2 "2024-11-08T13:22:51Z")

</div>


