Make Notepad using Tkinter

Last Updated : 17 Feb, 2026

Python provides the Tkinter library to create graphical user interface (GUI) applications. In this article, we will learn how to create a simple Notepad application using Python and Tkinter.

This Notepad will support basic features such as:

  • Creating a new file
  • Opening an existing file
  • Saving a file
  • Cut, Copy, and Paste operations
  • Help/About menu

Installation

Install Python's standard GUI library "tkinter" using the following pip command:

pip install tkinter

Step-Wise Implementation

1. Import Required Modules

In this step, we import all the necessary modules required for creating the GUI and handling files.

Python
import tkinter
import os
from tkinter import *
from tkinter.messagebox import *
from tkinter.filedialog import *

2. Define the Application Structure

Here, we define the main structure of the Notepad application, including the main window, text area, menus, and scrollbar.

3. Create the Menu Bar

In this step, we create the File, Edit, and Help menus and link them with their respective commands.

Python
self.__thisTextArea.grid(sticky=N + E + S + W)

self.__thisFileMenu.add_command(label="New", command=self.__newFile)
self.__thisFileMenu.add_command(label="Open", command=self.__openFile)
self.__thisFileMenu.add_command(label="Save", command=self.__saveFile)
self.__thisFileMenu.add_separator()
self.__thisFileMenu.add_command(label="Exit", command=self.__quitApplication)
self.__thisMenuBar.add_cascade(label="File", menu=self.__thisFileMenu)

self.__thisEditMenu.add_command(label="Cut", command=self.__cut)
self.__thisEditMenu.add_command(label="Copy", command=self.__copy)
self.__thisEditMenu.add_command(label="Paste", command=self.__paste)
self.__thisMenuBar.add_cascade(label="Edit", menu=self.__thisEditMenu)

self.__thisHelpMenu.add_command(label="About Notepad", command=self.__showAbout)
self.__thisMenuBar.add_cascade(label="Help", menu=self.__thisHelpMenu)

self.__root.config(menu=self.__thisMenuBar)

4. Implement Menu Functionalities

In this step, we define the functions that perform actions when a menu option is selected.

Exit Application: This function closes the Notepad window and terminates the application.

Python
def __quitApplication(self):
    self.__root.destroy()

Show About Dialog: This function displays basic information about the Notepad application.

Python
def __showAbout(self):
    showinfo("Notepad", "Simple Notepad using Python Tkinter")

Open an Existing File: This function opens a text file from the system and displays its content in the text area.

Python
def __openFile(self):
    self.__file = askopenfilename(defaultextension=".txt",
                                  filetypes=[("All Files","*.*"),
                                             ("Text Documents","*.txt")])
    if self.__file:
        self.__root.title(os.path.basename(self.__file) + " - Notepad")
        self.__thisTextArea.delete(1.0, END)
        with open(self.__file, "r") as file:
            self.__thisTextArea.insert(1.0, file.read())

Create a New File: This function clears the text area and prepares the editor for a new file.

Python
def __newFile(self):
    self.__root.title("Untitled - Notepad")
    self.__file = None
    self.__thisTextArea.delete(1.0, END)

Save the File: This function saves the current content of the text area to a file.

Python
def __saveFile(self):
    if self.__file is None:
        self.__file = asksaveasfilename(defaultextension=".txt",
                                        filetypes=[("All Files","*.*"),
                                                   ("Text Documents","*.txt")])
    if self.__file:
        with open(self.__file, "w") as file:
            file.write(self.__thisTextArea.get(1.0, END))
        self.__root.title(os.path.basename(self.__file) + " - Notepad")

Cut, Copy, and Paste Operations: These functions perform basic text editing operations on the selected text.

Python
def __cut(self):
    self.__thisTextArea.event_generate("<<Cut>>")

def __copy(self):
    self.__thisTextArea.event_generate("<<Copy>>")

def __paste(self):
    self.__thisTextArea.event_generate("<<Paste>>")
Comment