In this post, we will see how to make a notepad Gui application using tkinter module of Python.
Basic idea :
- when you open an already existing file then you have to show all the
contents of the file to the text editor..ie. you have to take all contents
of the file and insert them into the text editor. - when you open a new file then you have to delete all the contents of the
text editor i.e. make a text editor blank. - when you open an existing file then save it, then you have to overwrite the
content of the existing file.
Now, Let’s see the implementation:
# from tkinter library import everything
# this is used for making gui application
from tkinter import *
# from tkinter.messagebox class import showinfo static method
# this is used for showing about notepad
from tkinter.messagebox import showinfo
# from tkinter.filedialog import askopenfilename,asksaveasfilename static method
# this is used for opening the pre-existing file
# and saving the file.
from tkinter.filedialog import askopenfilename, asksaveasfilename
# import os library
# this is used for retrieving the base name of the file
import os
# function for creating new file
def newFile() :
# make file variable as a global
# so that it is acessible freely
# anywhere in the program
global file
# set the window name
root.title("Untitled - Notepad")
# intialise file with None
file = None
# delete TextArea full content
# 1.0 means 1st row and 0th column
TextArea.delete(1.0, END)
# function for opening the already existing file
def openFile() :
# make file variable as a global
global file
# for opening the all type of existing file
file = askopenfilename(defaultextension = ".txt",
filetypes = [("All Files","*.*"),
("Text Document","*.txt")])
# if not assining anything
# if you don't have any file to open
if file == "" :
#intialise file with None
file = None
# if you have a file to open
else :
# set name of the gui window same
# as the open file name
root.title(os.path.basename(file)+ "- Notepad")
# delete the overall content of the text area
TextArea.delete(1.0,END)
# open the file in read mode
# file object is created first
f = open(file,"r")
# read method of file object shows the content
# present in the file
# insert content of file to the text area
# from 1st row ,oth column to the end.
TextArea.insert(1.0, f.read())
# close the file object
# because its work is complete
f.close()
# function for saving the file
def saveFile() :
# make file variable as a global
global file
# if file is none then save as a new file
if file == None :
# set the name of new file
file = asksaveasfilename(initialfile = "Untitled.txt",
defaultextension = ".txt",
filetypes = [("All Files","*.*"),
("Text Document","*.txt")])
if file == "" :
#intialise file with None
file = None
else :
# save as a new file
# open the file in write mode
# file object is created first
f = open(file,"w")
# write the whole content of text area
# into the file object.
# getmethod gives the content of text area
f.write(TextAre.get(1.0,END))
# close and save the file object
# because its work is complete
f.close()
# after saving the file ,title change
# set the new title for root window
root.title(os.path.basename(file) + "- Notepad")
# if file is not none
# then is is save as a new file
# we can replace the content with
# text area content.
else :
# open the file in write mode
# file object is created first
f = open(file,"w")
# write the whole content of text area
# into the file object.
# getmethod gives the content of text area.
f.write(TextArea.get(1.0,END))
# close and save the file object
# because its work is complete
f.close()
# function for destroying the gui applicaton
def quitApp() :
root.destroy()
# function for cut functionality
def cut() :
# using the text area inbuilt events
TextArea.event_generate(("<<Cut>>"))
# function for copy functionality
def copy():
# using the text area inbuilt events
TextArea.event_generate(("<<Copy>>"))
# function for paste functionality
def paste():
# using the text area inbuilt events
TextArea.event_generate(("<<Paste>>"))
# function for about functionality
def about() :
# its pop-up show info window with Notepad name and given msg
showinfo("Notepad","Notepad by Code With Ankit Rai")
# Driver Code
if __name__ == "__main__" :
# tkinter window is created
root = Tk()
# set the title window name
root.title("Notepad")
# set the icon for the gui application
root.wm_iconbitmap(r"C:/Users/user/Pictures/notepad_icon.png")
# set the geometry i.e.
# length and breadth of the root window
root.geometry("644x788")
# create a text area for the root
# with lunida 13 font
# text area is for writing the content
TextArea = Text(root,font = "lucida 13")
# intialise file with None
file = None
# fix or adding the text area into the root window
# with expanding and filling features
# so that on increasing the size of window
# text area size is also increarse
TextArea.pack(expand = True,fill = BOTH)
# let's create a menubar for the root window
MenuBar = Menu(root)
# File menu starts-----
# create a file menu for menubar
FileMenu = Menu(MenuBar, tearoff = 0)
# command add to open new file
FileMenu.add_command(label = "New",command = newFile)
# command add to open alredy existing file
FileMenu.add_command(label = "Open", command = openFile)
# command add to save the current file
FileMenu.add_command(label = " Save",command = saveFile)
# adding the separator line in b/w exit label and other labels
FileMenu.add_separator()
# command add to exit the application
FileMenu.add_command(label = "Exit",command = quitApp)
# adding the file menu to the menubar with label File
MenuBar.add_cascade(label = "File",menu = FileMenu)
# File menu ends---
# Edit Menu Starts---
# create a Edit menu for menubar
EditMenu = Menu(MenuBar, tearoff = 0)
# add command to give a feature of cut,copy,paste function
EditMenu.add_command(label = "Cut", command = cut )
EditMenu.add_command(label = "Copy", command = copy )
EditMenu.add_command(label = "Patse", command = paste )
# adding the Edit menu to the menubar with label Edit
MenuBar.add_cascade(label = "Edit",menu = EditMenu)
# Edit menu ends -----
# help menu starts ----
# create a help menu for menubar
HelpMenu = Menu(MenuBar,tearoff = 0)
# command add to tell about the application
HelpMenu.add_command(label = "About Notepad",command = about)
# adding the help menu to the menubar with label help
MenuBar.add_cascade(label = "Help",menu = HelpMenu )
# help menu ends ---
# set the root config
# adding the menubar to the root window
root.config(menu = MenuBar)
# adding the scroll bar
# scroll bar is generate for text area
Scroll = Scrollbar(TextArea)
# set the location of the scroll bar
Scroll.pack(side = RIGHT, fill = Y)
# setting the scroll bar
Scroll.config(command = TextArea.yview)
TextArea.config(yscrollcommand = Scroll.set)
# start the gui application
root.mainloop()