calculator_improved.py

# ===================================================================
# 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()