Are you looking for a way to create a GUI calculator in Python using Tkinter? If so, then you have come to the right place! In this blog post, we will go over the steps to create a basic calculator in Python that has a Graphical User Interface (GUI). With Tkinter, you will be able to easily create a simple calculator with all the basic mathematical operations such as addition, subtraction, multiplication and division. We will also discuss how to customize the GUI to make it more visually appealing and user-friendly.
What is Tkinter?
Tkinter is a Python library that provides access to an extensive range of graphical user interface (GUI) elements. It is used to build GUI applications in Python and it is the standard GUI package for Python. Tkinter has been around since the early days of Python, and it has been highly influential in the development of modern GUI programming. Tkinter provides a powerful object-oriented interface to the Tcl/Tk GUI toolkit. With Tkinter, you can create a wide range of desktop applications that look great and feel natural.
Read this post if want to learn the basics of the Tkinter library: How to Create Desktop Application Using Python
Also Read: Basics of python programming in 30 days
How to create a GUI calculator in Python using Tkinter
Design the Calculator App
Before we start coding we first need to design the calculator GUI. To be sure of what exactly we are trying to achieve. For this tutorial, our calculator will look like the one below.

Okay, now we know what we want to achieve. Let’s now start our coding. I will divide the entire code into some steps to build our basic calculator in Python with the Tkinter library.
Step1: Import Library & Set-up Application Window
For this tutorial, I am going to set our application window size: width = 312 pixels and height = 324 pixels.
import tkinter as tk
# Create app window
win = tk.Tk()
# Specify screen size of the Application window
win.geometry("312x324")
# Disable resizing the app window
win.resizable(0, 0)
# Specify application name
win.title("Calculator")
Step2: Define Functions
In this step, we will write all the required functions for our calculator project.
################### python code for calculator gui ####################
input_value = ""
# Intialize StringVar
display_text = tk.StringVar()
# Function to continuously updates input field whenever you click a button
def click_button_action(item):
global input_value
input_value = input_value + str(item)
display_text.set(input_value)
# Function to clear the display
def clear_button_action():
global input_value
input_value = ""
display_text.set("")
# Function to calculate input values
def equal_button_action():
global input_value
result = str(eval(input_value))
display_text.set(result)
input_value = ""
In this code we are creating three functions:
- click_button_action: This function is to show values to the screen
- clear_button_action: This function is to clear the screen
- equal_button_action: This function is to calculate and displays the result
Here in this code:
- In line 6 : We are initializing the
StringVar
object. TkinterStringVar
allows you to effectively manage the value of a widget such as aLabel
orEntry
. - Line 23 : We are calculating the output of a string input using the
eval
function.- For example:
eval("5+4")
=>9
(output)
- For example:
Step3: Adding Widgets
Now we need to add all required widgets row-wise to make a graphical interface for our calculator app. First, we need to divide the entire window into two frames, then we need to add widgets inside those two frames.
- Display Frame
- Widget => input field (
Entry
widget)
- Widget => input field (
- Buttons frame
- In this frame, all buttons of numbers and expressions will be there
- 1st row:
Clear button
(combination of first 3 columns) anddivide button
(/) - 2nd row:
Button 7, 8, 9
, andmultiplication button
(X) - 3rd row:
Button 4, 5, 6
, andsubtraction button
(-) - 4th row:
Button 1, 2, 3
, andaddition button
(+) - 5th row:
Button 0
(combination of first two columns),point button
(.) andequal button
(=)

Okay now, let’s start designing our GUI calculator with functionality.
1. Create the Display frame
Let’s create the frame to display the inputs
# Create a frame for the display field
input_frame = tk.Frame(win, width=312, height=50, bd=0, highlightbackground="black", highlightcolor="black", highlightthickness=2)
input_frame.pack(side = tk.TOP)
Here bd
is border width
1.1 Create an Entry widget
The Entry
widget in Tkinter is used to enter or display a single line of text. Let’s create that.
# Create a input field inside the 'Frame'
input_field = tk.Entry(input_frame, font=('arial', 18, 'bold'), textvariable = display_text, width=50, bg="#eee", bd=0, justify=tk.RIGHT)
input_field.grid(row=0, column=0)
input_field.pack(ipady=10) # 'ipady' is for internal padding to change the height of the input field
2. Create a Frame for buttons
Now let’s create another frame for buttons below the display frame
or input frame
.
# Create another 'Frame' for buttons
btns_frame = tk.Frame(win, width=312, height=272.5, bg="grey")
btns_frame.pack()
So, we created our button frame. Now let’s create all required button widgets row by row.
2.1 Create the First row
In this row, there should be only a clear button
and a divide button
.
# 1st row
clear_btn = tk.Button(btns_frame, text = "C", fg = "black", width = 32, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: clear_button_action()).grid(row = 0, column = 0, columnspan = 3, padx = 1, pady = 1)
divide_btn = tk.Button(btns_frame, text = "/", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("/")).grid(row = 0, column = 3, padx = 1, pady = 1)
2.2 Create the second row
In this row, there should be four buttons:
- Button for digit 7
- Button for digit 8
- Button for digit 9
- Button for multiplication (x)
# 2nd row
btn_7 = tk.Button(btns_frame, text = "7", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(7)).grid(row = 1, column = 0, padx = 1, pady = 1)
btn_8 = tk.Button(btns_frame, text = "8", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(8)).grid(row = 1, column = 1, padx = 1, pady = 1)
btn_9 = tk.Button(btns_frame, text = "9", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(9)).grid(row = 1, column = 2, padx = 1, pady = 1)
multiply_btn = tk.Button(btns_frame, text = "X", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("*")).grid(row = 1, column = 3, padx = 1, pady = 1)
2.3 Create the 3rd row
In this row, four buttons will be there:
- Button for digit 4
- Button for digit 5
- Button for digit 6
- Button for Minus or subtraction (-)
# 3rd row
btn_4 = tk.Button(btns_frame, text = "4", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(4)).grid(row = 2, column = 0, padx = 1, pady = 1)
btn_5 = tk.Button(btns_frame, text = "5", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(5)).grid(row = 2, column = 1, padx = 1, pady = 1)
btn_6 = tk.Button(btns_frame, text = "6", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(6)).grid(row = 2, column = 2, padx = 1, pady = 1)
minus_btn = tk.Button(btns_frame, text = "-", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("-")).grid(row = 2, column = 3, padx = 1, pady = 1)
2.4 Create the 4th row
In this row, four buttons need to be available:
- Button for digit 1
- Button for digit 2
- Button for digit 3
- Button for plus or addition (+)
# 4th row
btn_1 = tk.Button(btns_frame, text = "1", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(1)).grid(row = 3, column = 0, padx = 1, pady = 1)
btn_2 = tk.Button(btns_frame, text = "2", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(2)).grid(row = 3, column = 1, padx = 1, pady = 1)
btn_3 = tk.Button(btns_frame, text = "3", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(3)).grid(row = 3, column = 2, padx = 1, pady = 1)
plus_btn = tk.Button(btns_frame, text = "+", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("+")).grid(row = 3, column = 3, padx = 1, pady = 1)
2.5 Create the 5th Row
In this row, the last three need to be there:
- Button for digit 0
- Button for point (.)
- Equal button (=)
# 5th row
btn_0 = tk.Button(btns_frame, text = "0", fg = "black", width = 21, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(0)).grid(row = 4, column = 0, columnspan = 2, padx = 1, pady = 1)
point_btn = tk.Button(btns_frame, text = ".", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action(".")).grid(row = 4, column = 2, padx = 1, pady = 1)
equals_btn = tk.Button(btns_frame, text = "=", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: equal_button_action()).grid(row = 4, column = 3, padx = 1, pady = 1)
Step4: Run mainloop()
At this point, we are done with our python code for the calculator GUI. Now we just need to run the mainloop()
method to see the application live.
win.mainloop()
That’s it. You successfully created a calculator in python using the Tkinter library, which should be up and running in your Windows system right now.
Course For You: Learn Python by creating 10 apps with Tkinter
Full Code
I discussed lots of things in order to create a Python calculator GUI. Allow me to now assemble everything and create a final code for you.
################### python code for calculator gui ####################
import tkinter as tk
# Create app window
win = tk.Tk()
# Specify screen size of the Application window
win.geometry("312x324")
# Disable resizing the app window
win.resizable(0, 0)
# Specify application name
win.title("Calculator")
# ------- Write required functions tkinter-calculator ----------
input_value = ""
# Intialize StringVar
display_text = tk.StringVar()
# Function to continuously updates input field whenever you click a button
def click_button_action(item):
global input_value
input_value = input_value + str(item)
display_text.set(input_value)
# Function to clear the display
def clear_button_action():
global input_value
input_value = ""
display_text.set("")
# Function to calculate input values
def equal_button_action():
global input_value
result = str(eval(input_value))
display_text.set(result)
input_value = ""
# ----------------------------------------------------
# Create a frame for the display field
input_frame = tk.Frame(win, width=312, height=50, bd=0, highlightbackground="black", highlightcolor="black", highlightthickness=2)
input_frame.pack(side = tk.TOP)
# Create a input field (Entry widget) inside the 'Frame'
input_field = tk.Entry(input_frame, font=('arial', 18, 'bold'), textvariable = display_text, width=50, bg="#eee", bd=0, justify=tk.RIGHT)
input_field.grid(row=0, column=0)
input_field.pack(ipady=10) # 'ipady' is for internal padding to change the height of the input field
# -------------------------------------------------------
# Create another 'Frame' for buttons
btns_frame = tk.Frame(win, width=312, height=272.5, bg="grey")
btns_frame.pack()
# 1st row
clear_btn = tk.Button(btns_frame, text = "C", fg = "black", width = 32, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: clear_button_action()).grid(row = 0, column = 0, columnspan = 3, padx = 1, pady = 1)
divide_btn = tk.Button(btns_frame, text = "/", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("/")).grid(row = 0, column = 3, padx = 1, pady = 1)
# 2nd row
btn_7 = tk.Button(btns_frame, text = "7", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(7)).grid(row = 1, column = 0, padx = 1, pady = 1)
btn_8 = tk.Button(btns_frame, text = "8", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(8)).grid(row = 1, column = 1, padx = 1, pady = 1)
btn_9 = tk.Button(btns_frame, text = "9", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(9)).grid(row = 1, column = 2, padx = 1, pady = 1)
multiply_btn = tk.Button(btns_frame, text = "X", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("*")).grid(row = 1, column = 3, padx = 1, pady = 1)
# 3rd row
btn_4 = tk.Button(btns_frame, text = "4", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(4)).grid(row = 2, column = 0, padx = 1, pady = 1)
btn_5 = tk.Button(btns_frame, text = "5", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(5)).grid(row = 2, column = 1, padx = 1, pady = 1)
btn_6 = tk.Button(btns_frame, text = "6", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(6)).grid(row = 2, column = 2, padx = 1, pady = 1)
minus_btn = tk.Button(btns_frame, text = "-", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("-")).grid(row = 2, column = 3, padx = 1, pady = 1)
# 4th row
btn_1 = tk.Button(btns_frame, text = "1", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(1)).grid(row = 3, column = 0, padx = 1, pady = 1)
btn_2 = tk.Button(btns_frame, text = "2", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(2)).grid(row = 3, column = 1, padx = 1, pady = 1)
btn_3 = tk.Button(btns_frame, text = "3", fg = "black", width = 10, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(3)).grid(row = 3, column = 2, padx = 1, pady = 1)
plus_btn = tk.Button(btns_frame, text = "+", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action("+")).grid(row = 3, column = 3, padx = 1, pady = 1)
# 5th row
btn_0 = tk.Button(btns_frame, text = "0", fg = "black", width = 21, height = 3, bd = 0, bg = "#fff", cursor = "hand2", command = lambda: click_button_action(0)).grid(row = 4, column = 0, columnspan = 2, padx = 1, pady = 1)
point_btn = tk.Button(btns_frame, text = ".", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: click_button_action(".")).grid(row = 4, column = 2, padx = 1, pady = 1)
equals_btn = tk.Button(btns_frame, text = "=", fg = "black", width = 10, height = 3, bd = 0, bg = "#eee", cursor = "hand2", command = lambda: equal_button_action()).grid(row = 4, column = 3, padx = 1, pady = 1)
# Run main loop
win.mainloop()
End Note
In this tutorial, I created a calculator project in Python using the Tkinter library. Now, this is just a starting point, you can take this forward to make advanced calculator GUI projects such as a scientific calculator.
This is all for this tutorial, if you have any questions or suggestions regarding this post, shoot those in the comment section below.
Similar Read:
- Display Excel like Table using Tkinter – Python
- Make Desktop Notifier App using Python & Tkinter
- Build Digital & Analog Clock GUI with Python Tkinter
- How to make a Stopwatch GUI in Python Tkinter
- How to Create Desktop Application Using Python

Hi there, I’m Anindya Naskar, Data Science Engineer. I created this website to show you what I believe is the best possible way to get your start in the field of Data Science.