Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
11 views8 pages

Building A Simple GUI Calculator

This document outlines the code for a simple scientific calculator using the Tkinter library in Python. It includes functionalities for basic arithmetic operations, trigonometric functions, logarithmic calculations, and constants like pi and e. The GUI is designed with a fixed size and includes a menu for switching between standard and scientific modes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views8 pages

Building A Simple GUI Calculator

This document outlines the code for a simple scientific calculator using the Tkinter library in Python. It includes functionalities for basic arithmetic operations, trigonometric functions, logarithmic calculations, and constants like pi and e. The GUI is designed with a fixed size and includes a menu for switching between standard and scientific modes.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

# Building A simple GUI Calculator

from tkinter import *


import math
from tkinter import ttk, messagebox # import tkinter.messagebox

root = Tk()

# sets the name on the top of the gui


root.title('Scientific Calculator')

# sets the background color of the calculator as silver


root.configure(background='silver')

# fixed the width and height of the gui so can't be expanded


root.resizable(width=False, height=False)

# sets the geometry


root.geometry('480x568+450+90')

# holds the buttons in the calculator


# acts as container for numbers and operators
calc = Frame(root)

# creating a grid like pattern of the frame e.g buttons


calc.grid()

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 display(self, value):
txtDisplay.delete(0, END)
txtDisplay.insert(0, value)

def valid_function(self):
if self.op == 'add':
self.total += self.current
elif self.op == 'sub':
self.total -= self.current
elif self.op == 'multi':
self.total *= self.current
elif self.op == 'divide':
self.total /= self.current
elif self.op == 'mod':
self.total %= 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 pi(self):
self.result = False
self.current = math.pi
self.display(self.current)

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

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

def mathPM(self):
self.result = False
self.current = -(float(txtDisplay.get()))
self.display(self.current)

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

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

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

def tan(self):
self.result = False
self.current = math.cosh(math.radians(float(txtDisplay.get())))
self.display(self.current)

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

def sin(self):
self.result = False
self.current = math.tan(math.radians(float(txtDisplay.get())))
self.display(self.current)

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

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

def exp(self):
self.result = False
self.current = math.exp(float(txtDisplay.get()))
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)

added_value = Calc()

txtDisplay = Entry(calc, font=('Helvetica', 20, 'bold'),


bg='black', fg='white',
bd=30, width=28, justify=RIGHT)

txtDisplay.grid(row=0, column=0, columnspan=4, pady=1)


txtDisplay.insert(0, '0')

# store all the numbers in a variable


numberpad = '789456123'

# here i will count the rows for placing buttons in grid


i = 0

# create an empty list to store each button with its particular


specifications
btn = []

# j is in that range to place the button in that particular row


# k is in that range to place the button in that particular column
for j in range(2, 5):
for k in range(3):
btn.append(Button(calc, width=6, height=2, bg='black', fg='white',
font=('Helvetica', 20, 'bold'), bd=4,
text=numberpad[i]))

# set buttons in rows & column and separate them with a padding of
1 unit
btn[i].grid(row=j, column=k, pady=1)
btn[i]['command'] = lambda x=numberpad[i]:
added_value.numberEnter(x)
i = i + 1

btnClear = Button(calc, text='C', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.Clear_Entry).grid(row=1,
column=0, pady=1)

btnAllClear = Button(calc, text='CE', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.All_Clear_Entry).grid(row=1,
column=1, pady=1)

btnsq = Button(calc, text='\u221A', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.squared).grid(row=1, column=2,
pady=1)

btnAdd = Button(calc, text='+', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=lambda:
added_value.operation('add')).grid(row=1, column=3, pady=1)

btnSub = Button(calc, text='-', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=lambda:
added_value.operation('sub')).grid(row=2, column=3, pady=1)

btnMul = Button(calc, text='x', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=lambda:
added_value.operation('multi')).grid(row=3, column=3, pady=1)

btnDiv = Button(calc, text='/', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=lambda:
added_value.operation('divide')).grid(row=4, column=3, pady=1)

btnZero = Button(calc, text='0', width=6, height=2, bg='black', fg='white',


font=('Helvetica', 20, 'bold'),
bd=4, command=lambda:
added_value.numberEnter(0)).grid(row=5, column=0, pady=1)

btnDot = Button(calc, text='.', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=lambda:
added_value.numberEnter('.')).grid(row=5, column=1, pady=1)

# chr(177) == +-
btnPM = Button(calc, text=chr(177), width=6, height=2, bg='powder blue',
font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.mathPM).grid(row=5, column=2,
pady=1)

btnEquals = Button(calc, text='=', width=6, height=2, bg='powder blue',


font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.sum_of_total).grid(row=5,
column=3, pady=1)

# ROW 1:
btnPi = Button(calc, text='pi', width=6, height=2, bg='black', fg='white',
font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.pi).grid(row=1, column=4, pady=1)

btncos = Button(calc, text='Cos', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.cos).grid(row=1, column=5,
pady=1)

btntan = Button(calc, text='tan', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.tan).grid(row=1, column=6,
pady=1)

btnsin = Button(calc, text='sin', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.sin).grid(row=1, column=7,
pady=1)

# ROW 2:
btn2Pi = Button(calc, text='2pi', width=6, height=2, bg='black',
fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.tau).grid(row=2, column=4,
pady=1)

btncosh = Button(calc, text='Cosh', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.cosh).grid(row=2, column=5,
pady=1)

btntanh = Button(calc, text='tanh', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.tanh).grid(row=2, column=6,
pady=1)

btnsinh = Button(calc, text='sinh', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.sinh).grid(row=2, column=7,
pady=1)

# ROW 3:
btnlog = Button(calc, text='log', width=6, height=2, bg='black',
fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.log).grid(row=3, column=4,
pady=1)

btnexp = Button(calc, text='exp', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.exp).grid(row=3, column=5,
pady=1)

btnmod = Button(calc, text='mod', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=lambda:
added_value.operation('mod')).grid(row=3, column=6, pady=1)

btne = Button(calc, text='e', width=6, height=2, bg='black', fg='white',


font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.e).grid(row=3, column=7, pady=1)

# ROW 4:
btnlog10 = Button(calc, text='log10', width=6, height=2, bg='black',
fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.log10).grid(row=4, column=4,
pady=1)

btnlog1p = Button(calc, text='log1p', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.log1p).grid(row=4, column=5,
pady=1)

btnexpm1 = Button(calc, text='expm1', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.expm1).grid(row=4, column=6,
pady=1)

btngamma = Button(calc, text='gamma', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.lgamma).grid(row=4, column=7,
pady=1)

# ROW 5:
btnlog2 = Button(calc, text='log2', width=6, height=2, bg='black',
fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.log2).grid(row=5, column=4,
pady=1)

btndeg = Button(calc, text='deg', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.degrees).grid(row=5, column=5,
pady=1)

btnacosh = Button(calc, text='acosh', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.acosh).grid(row=5, column=6,
pady=1)

btnasinh = Button(calc, text='asinh', width=6, height=2, bg='black',


fg='white', font=('Helvetica', 20, 'bold'),
bd=4, command=added_value.asinh).grid(row=5, column=7,
pady=1)

lblDisplay = Label(calc, text='Scientific Calculator', font=('Helvetica',


30, 'bold'),
bg='black', fg='white', justify=CENTER)

lblDisplay.grid(row=0, column=4, columnspan=4)

# use askyesno function to stop/continue the program execution


def iExit():
iExit = tkinter.messagbox.askyesno('Scientific Calculator', 'Do you
want to exit ?')

if iExit > 0:
root.destroy()
return

def Scientific():
root.resizable(width=False, height=False)
root.geometry("944x568+0+0")

def Standard():
root.resizable(width=False, height=False)
root.geometry("480x568+0+0")
menubar = Menu(calc)

# MENUBAR 1:
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)

# MENUBAR 2:
editmenu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='Edit', menu=editmenu)
editmenu.add_command(label='Cut')
editmenu.add_command(label='Copy')
editmenu.add_separator()
editmenu.add_command(label='Paste')

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

You might also like