Create a Calculator in Python
In this example, we will show you how to to create a GUI calculator using the tkinter standard GUI library of Python.
The calculator should look like this:

The following code creates and displays a calculator in Python:
# importing required libraries
import tkinter
from tkinter import *
from tkinter import messagebox
# setting initial values of some variables
var = ""
A = 0
operator = ""
# defining function for Button 1
def button_1_is_Clicked():
global var
var = var + "1"
_data.set(var)
# defining function for Button 2
def button_2_is_Clicked():
global var
var = var + "2"
_data.set(var)
# defining function for Button 3
def button_3_is_Clicked():
global var
var = var + "3"
_data.set(var)
# defining function for Button 4
def button_4_is_Clicked():
global var
var = var + "4"
_data.set(var)
# defining function for Button 5
def button_5_is_Clicked():
global var
var = var + "5"
_data.set(var)
# defining function for Button 6
def button_6_is_Clicked():
global var
var = var + "6"
_data.set(var)
# defining function for Button 7
def button_7_is_Clicked():
global var
var = var + "7"
_data.set(var)
# defining function for Button 8
def button_8_is_Clicked():
global var
var = var + "8"
_data.set(var)
# defining function for Button 9
def button_9_is_Clicked():
global var
var = var + "9"
_data.set(var)
# defining function for Button 0
def button_0_is_Clicked():
global var
var = var + "0"
_data.set(var)
# defining function for Button +
def button_Add_is_Clicked():
global A
global var
global operator
A = float(var)
operator = "+"
var = var + "+"
_data.set(var)
# defining function for Button -
def button_Sub_is_Clicked():
global A
global var
global operator
A = float(var)
operator = "-"
var = var + "-"
_data.set(var)
# defining function for Button *
def button_Mul_is_Clicked():
global A
global var
global operator
A = float(var)
operator = "*"
var = var + "*"
_data.set(var)
# defining function for Button /
def button_Div_is_Clicked():
global A
global var
global operator
A = float(var)
operator = "/"
var = var + "/"
_data.set(var)
# defining function for Button =
def button_Equal_is_Clicked():
global A
global var
global operator
A = float(var)
operator = "="
var = var + "="
_data.set(var)
# defining function for Button C
def button_C_is_Clicked():
global A
global var
global operator
var = ""
A = 0
operator = ""
_data.set(var)
# defining function to display result
def res():
global A
global operator
global var
var2 = var
if operator == "+":
a = float((var2.split("+")[1]))
x = A + a
_data.set(x)
var = str(x)
elif operator == "-":
a = float((var2.split("-")[1]))
x = A - a
_data.set(x)
var = str(x)
elif operator == "*":
a = float((var2.split("*")[1]))
x = A * a
_data.set(x)
var = str(x)
elif operator == "/":
a = float((var2.split("/")[1]))
if a == 0:
messagebox.showerror("Division by 0 Not Allowed.")
A == ""
var = ""
_data.set(var)
else:
x = float(A/a)
_data.set(x)
var = str(x)
# creating an object of Tk() class
guiWindow = tkinter.Tk()
# setting size of window
guiWindow.geometry("320x500+300+300")
# disabling resize option
guiWindow.resizable(0, 0)
# setting title of window
guiWindow.title("GUI Calculator")
# creating calculator display screen
_data = StringVar()
guiLabel = Label(
guiWindow,
text="Label",
anchor=SE,
font=("Cambria Math", 30),
textvariable=_data,
background="#ffffff",
fg="#000000"
)
# using pack() method
guiLabel.pack(expand=True, fill="both")
# creating frames for buttons
# first frame
frameOne = Frame(guiWindow, bg="#000000")
# frame can expand if it gets some space
frameOne.pack(expand=True, fill="both")
# second frame
frameTwo = Frame(guiWindow, bg="#000000")
frameTwo.pack(expand=True, fill="both")
# third frame
frameThree = Frame(guiWindow, bg="#000000")
frameThree.pack(expand=True, fill="both")
# fourth frame
frameFour = Frame(guiWindow, bg="#000000")
frameFour.pack(expand=True, fill="both")
# creating buttons for each frame
# buttons for first frame
# button 1
buttonONE = Button(
frameOne,
text="1",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_1_is_Clicked
)
# placing buttons side by side
buttonONE.pack(side=LEFT, expand=True, fill="both")
# button 2
buttonTWO = Button(
frameOne,
text="2",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_2_is_Clicked
)
# placing buttons side by side
buttonTWO.pack(side=LEFT, expand=True, fill="both")
# button 3
buttonTHREE = Button(
frameOne,
text="3",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_3_is_Clicked
)
# placing buttons side by side
buttonTHREE.pack(side=LEFT, expand=True, fill="both")
# button C
buttonC = Button(
frameOne,
text="C",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_C_is_Clicked
)
# placing buttons side by side
buttonC.pack(side=LEFT, expand=True, fill="both")
# buttons for second frame
# button 4
buttonFOUR = Button(
frameTwo,
text="4",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_4_is_Clicked
)
# placing buttons side by side
buttonFOUR.pack(side=LEFT, expand=True, fill="both")
# button 5
buttonFIVE = Button(
frameTwo,
text="5",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_5_is_Clicked
)
# placing buttons side by side
buttonFIVE.pack(side=LEFT, expand=True, fill="both")
# button 6
buttonSIX = Button(
frameTwo,
text="6",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_6_is_Clicked
)
# placing buttons side by side
buttonSIX.pack(side=LEFT, expand=True, fill="both")
# button +
buttonADD = Button(
frameTwo,
text="+",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_Add_is_Clicked
)
# placing buttons side by side
buttonADD.pack(side=LEFT, expand=True, fill="both")
# buttons for third frame
# button 7
buttonSEVEN = Button(
frameThree,
text="7",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_7_is_Clicked
)
# placing buttons side by side
buttonSEVEN.pack(side=LEFT, expand=True, fill="both")
# button 8
btnEIGHT = Button(
frameThree,
text="8",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_8_is_Clicked
)
# placing buttons side by side
btnEIGHT.pack(side=LEFT, expand=True, fill="both")
# button 9
buttonNINE = Button(
frameThree,
text="9",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_9_is_Clicked
)
# placing buttons side by side
buttonNINE.pack(side=LEFT, expand=True, fill="both")
# button -
buttonSUB = Button(
frameThree,
text="-",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_Sub_is_Clicked
)
# placing buttons side by side
buttonSUB.pack(side=LEFT, expand=True, fill="both")
# buttons for fourth frame
# button 0
buttonZERO = Button(
frameFour,
text="0",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_0_is_Clicked
)
# placing buttons side by side
buttonZERO.pack(side=LEFT, expand=True, fill="both")
# button *
buttonMUL = Button(
frameFour,
text="*",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_Mul_is_Clicked
)
# placing buttons side by side
buttonMUL.pack(side=LEFT, expand=True, fill="both")
# button /
buttonDIV = Button(
frameFour,
text="/",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=button_Div_is_Clicked
)
# placing buttons side by side
buttonDIV.pack(side=LEFT, expand=True, fill="both")
# button +
btnEQUAL = Button(
frameFour,
text="=",
font=("Cambria", 22),
relief=GROOVE,
border=0,
command=res
)
# placing buttons side by side
btnEQUAL.pack(side=LEFT, expand=True, fill="both")
# running GUI
guiWindow.mainloop()