# ===================================================================
# Calculator
# ===================================================================
# From: restaurant management system
# https://www.youtube.com/watch?v=hqC9tioGCi0
# ===================================================================
import sys
if sys.version_info.major == 3:
from tkinter import *
from tkinter.font import *
py3 = True
else:
from Tkinter import *
from tkFont import *
py3 = False
# -------------------------------------------------------------------
# --- global variables
# --- Note: Consolas font must be installed on Linux
# -------------------------------------------------------------------
#calcFont = ('aeril', '15', 'bold')
#calcFont = ('Consolas', '15', 'bold')
calcFont = ('monospace', '15', 'bold')
# -------------------------------------------------------------------
# --- button callback functions
# -------------------------------------------------------------------
def btnClick(numbers):
global operator
operator = operator + str(numbers)
text_Input.set(operator)
def btnClearDisplay():
global operator
operator=''
text_Input.set('')
def btnEqualsInput():
global operator
sumup = str(eval(operator))
text_Input.set(sumup)
operator=''
def quit():
sys.exit()
# -------------------------------------------------------------------
# --- main
# -------------------------------------------------------------------
root = Tk()
root.title('Calculator')
text_Input = StringVar()
operator = ''
f1 = Frame(root,relief='flat')
f1.grid(row=0,column=0)
f2 = Frame(root,relief='flat',padx=4, pady=4)
f2.grid(row=1, column=0)
Label(f1,font=calcFont,text='Calculator',bd=10).grid(row=0,column=0)
# -------------------------------------------------------------------
# -- display
# -------------------------------------------------------------------
txtDisplay = Entry(f2,font=calcFont, textvariable=text_Input,
bd=8,insertwidth=4,justify='right')
txtDisplay.grid(columnspan=4)
# -------------------------------------------------------------------
# -- buttons
# -------------------------------------------------------------------
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='7',
command=lambda: btnClick(7)).grid(row=2,column=0)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='8',
command=lambda: btnClick(8)).grid(row=2,column=1)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='9',
command=lambda: btnClick(9)).grid(row=2,column=2)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='+',
command=lambda: btnClick('+')).grid(row=2,column=3)
# -------------------------------------------------------------------
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='4',
command=lambda: btnClick(4)).grid(row=3,column=0)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='5',
command=lambda: btnClick(5)).grid(row=3,column=1)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='6',
command=lambda: btnClick(6)).grid(row=3,column=2)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='-',
command=lambda: btnClick('+')).grid(row=3,column=3)
# -------------------------------------------------------------------
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='1',
command=lambda: btnClick(1)).grid(row=4,column=0)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='2',
command=lambda: btnClick(2)).grid(row=4,column=1)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='3',
command=lambda: btnClick(3)).grid(row=4,column=2)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='*',
command=lambda: btnClick('*')).grid(row=4,column=3)
# -------------------------------------------------------------------
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='0',
command=lambda: btnClick(0)).grid(row=5,column=0)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='C',
command=btnClearDisplay).grid(row=5,column=1)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='=',
command=btnEqualsInput).grid(row=5,column=2)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='/',
command=lambda: btnClick('/')).grid(row=5,column=3)
# -------------------------------------------------------------------
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='(',
command=lambda: btnClick('(')).grid(row=6,column=0)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text=')',
command=lambda: btnClick(')')).grid(row=6,column=1)
Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='.',
command=lambda: btnClick('.')).grid(row=6,column=2)
#Button(f2,padx=16,pady=16,bd=8,font=calcFont,text='Quit',
# command=quit).grid(row=6,column=3)
# -------------------------------------------------------------------
root.mainloop()