How to create a simple Notepad desktop application using Python and Tkinter

In this blog post, we’ll explore how to create a basic Notepad desktop application using Python and Tkinter, Python’s built-in GUI toolkit.

A Notepad application is a quintessential project for beginners in GUI programming. It provides a hands-on experience in building a simple yet functional desktop application. Additionally, it covers essential concepts such as user interface design, file handling, and event-driven programming.

Setting Up the Environment: Before we dive into the code, ensure that Python and Tkinter are installed on your system. Tkinter comes pre-installed with Python, so you likely won’t need to install it separately.

Creating the Notepad Application: We’ll start by importing the necessary modules and setting up the basic structure of our application.

Python
import tkinter as tk
from tkinter import scrolledtext, filedialog, messagebox

Next, we’ll define a class for our Notepad application and initialize the main window and text area.

Python
class NotepadApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Simple Notepad")
        self.text_area = scrolledtext.ScrolledText(root, wrap=tk.WORD)
        self.text_area.pack(expand=True, fill='both')
        self.create_menu()

We then create a menu bar with options for New, Open, Save, and Exit.

Python
def create_menu(self):
    menu_bar = tk.Menu(self.root)
    file_menu = tk.Menu(menu_bar, tearoff=0)
    file_menu.add_command(label="New", command=self.new_file)
    file_menu.add_command(label="Open", command=self.open_file)
    file_menu.add_command(label="Save", command=self.save_file)
    file_menu.add_command(label="Exit", command=self.exit_app)
    menu_bar.add_cascade(label="File", menu=file_menu)
    self.root.config(menu=menu_bar)

We implement methods for handling file operations such as creating a new file, opening an existing file, and saving the content.

Python
def new_file(self):
    self.text_area.delete(1.0, tk.END)

def open_file(self):
    file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
    if file_path:
        with open(file_path, 'r') as file:
            self.text_area.delete(1.0, tk.END)
            self.text_area.insert(tk.END, file.read())

def save_file(self):
    file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
    if file_path:
        with open(file_path, 'w') as file:
            file.write(self.text_area.get(1.0, tk.END))

Lastly, we handle the application exit and create an instance of the NotepadApp class.

Python
def exit_app(self):
    if messagebox.askokcancel("Quit", "Are you sure you want to quit?"):
        self.root.destroy()

if __name__ == "__main__":
    root = tk.Tk()
    app = NotepadApp(root)
    root.mainloop()

Now the code will look like,
Python
import tkinter as tk
from tkinter import scrolledtext, filedialog, messagebox

class NotepadApp:
    def __init__(self, root):
        self.root = root
        self.root.title("Simple Notepad")
        self.text_area = scrolledtext.ScrolledText(root, wrap=tk.WORD)
        self.text_area.pack(expand=True, fill='both')
        self.create_menu()

    def create_menu(self):
        menu_bar = tk.Menu(self.root)
        file_menu = tk.Menu(menu_bar, tearoff=0)
        file_menu.add_command(label="New", command=self.new_file)
        file_menu.add_command(label="Open", command=self.open_file)
        file_menu.add_command(label="Save", command=self.save_file)
        file_menu.add_command(label="Exit", command=self.exit_app)
        menu_bar.add_cascade(label="File", menu=file_menu)
        self.root.config(menu=menu_bar)

    def new_file(self):
        self.text_area.delete(1.0, tk.END)

    def open_file(self):
        file_path = filedialog.askopenfilename(filetypes=[("Text files", "*.txt")])
        if file_path:
            with open(file_path, 'r') as file:
                self.text_area.delete(1.0, tk.END)
                self.text_area.insert(tk.END, file.read())

    def save_file(self):
        file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text files", "*.txt")])
        if file_path:
            with open(file_path, 'w') as file:
                file.write(self.text_area.get(1.0, tk.END))

    def exit_app(self):
        if messagebox.askokcancel("Quit", "Are you sure you want to quit?"):
            self.root.destroy()

if __name__ == "__main__":
    root = tk.Tk()
    app = NotepadApp(root)
    root.mainloop()

Conclusion: In this tutorial, we’ve learned how to create a simple Notepad desktop application using Python and Tkinter. While this application is basic, it serves as an excellent starting point for exploring more complex GUI applications. With further enhancements and additional features, you can turn it into a fully-fledged text editor or customize it to suit your specific needs. Happy coding!

Leave a Comment

Your email address will not be published. Required fields are marked *

Shopping Cart