w3resource

Simple Text Editor in Python with Tkinter


Basic Text Editor:

Create a text editor with features like opening, editing, and saving text files.

Input values:

User interacts with the text editor by opening, editing, and saving text files.

Output value:

Visual representation of the text editor with the contents of the text files, along with feedback on user actions (opening, editing, saving).

Example:

Input values:
1. Open an existing text file
- User selects the file: "test.txt"
Output value:
Text editor displays the contents of the file "test.txt" for editing.
Input values:
2. Edit the text content
- User modifies the text: "This is the edited content of the text file."
Output value:
Text editor updates to display modified text content.
Input values:
3. Save the changes
- User saves the changes made to the file.
Output value:
Text editor saves the changes to the file "example.txt" and provides feedback on successful saving.
Input values:
4. Create a new text file
- User selects to create a new file.
Output value:
Text editor opens up a blank document for writing text.
Input values:
5. Enter text into the new document
- User types: "This is a new document."
Output value:
Text editor displays the entered text in the new document.
Input values:
6. Save the new document
- User saves the new document as "new_test.txt".
Output value:
Text editor saves the new document as "new_test.txt" and provides feedback on successful saving. 

Solution 1: Basic Text Editor Using Tkinter

This solution uses the tkinter library to create a simple GUI-based text editor. It provides basic functionalities such as opening, editing, saving text files, and creating new files.

Code:

import tkinter as tk  # Import tkinter for GUI
from tkinter import filedialog  # Import filedialog to handle file operations

# Function to open an existing text file
def open_file():
    """Opens an existing text file."""
    # Ask user to select a file to open
    file_path = filedialog.askopenfilename(defaultextension=".txt", filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")])
    if file_path:
        try:
            # Open the file in read mode
            with open(file_path, "r") as file:
                text_area.delete(1.0, tk.END)  # Clear the current content of the text area
                text_area.insert(tk.END, file.read())  # Insert the file content into the text area
            window.title(f"Text Editor - {file_path}")  # Update the window title with the file name
        except Exception as e:
            print(f"Error opening file: {e}")  # Print an error message if file opening fails

# Function to save the current content to a text file
def save_file():
    """Saves the current content to a text file."""
    # Ask user to select a file to save
    file_path = filedialog.asksaveasfilename(defaultextension=".txt", filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")])
    if file_path:
        try:
            # Open the file in write mode
            with open(file_path, "w") as file:
                file.write(text_area.get(1.0, tk.END))  # Write the content of the text area to the file
            window.title(f"Text Editor - {file_path}")  # Update the window title with the file name
        except Exception as e:
            print(f"Error saving file: {e}")  # Print an error message if file saving fails

# Function to create a new text file
def new_file():
    """Creates a new text file."""
    text_area.delete(1.0, tk.END)  # Clear the text area
    window.title("Text Editor - New File")  # Update the window title

# Create the main window
window = tk.Tk()
window.title("Text Editor")  # Set window title
window.geometry("600x400")  # Set window size

# Create a text area widget
text_area = tk.Text(window, wrap='word')
text_area.pack(expand=1, fill='both')

# Create a menu bar
menu_bar = tk.Menu(window)
window.config(menu=menu_bar)

# Add file menu options
file_menu = tk.Menu(menu_bar, tearoff=0)
menu_bar.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New", command=new_file)  # New file option
file_menu.add_command(label="Open", command=open_file)  # Open file option
file_menu.add_command(label="Save", command=save_file)  # Save file option
file_menu.add_separator()
file_menu.add_command(label="Exit", command=window.quit)  # Exit option

# Run the application
window.mainloop()  

Output:

Python: Basic Text Editor Using Tkinter. 

Explanation

  • Imports tkinter library to create a GUI for the text editor.
  • Functions:
    • open_file(): Opens a file dialog to select a file, reads its content, and displays it in the text editor.
    • save_file(): Opens a save dialog to save the current text content to a file.
    • new_file(): Clears the text area for creating a new file.
  • GUI Components:
    • Creates the main window and a text area widget for editing.
    • Adds a menu bar with options for creating a new file, opening an existing file, saving the current file, and exiting the editor.
  • Run the Application: Starts the Tkinter main loop to display the GUI.

Solution 2: Basic Text Editor Using PyQt5

This solution uses the PyQt5 library to create a text editor with a GUI. It includes functionalities such as opening, editing, and saving text files and creating new files.

Code:

import sys  # Import sys for command-line arguments
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog, QMessageBox  # Import PyQt5 modules

# Class to create the text editor window
class TextEditor(QMainWindow):
    def __init__(self):
        """Initializes the text editor."""
        super().__init__()
        self.initUI()  # Call method to initialize the user interface

    # Method to initialize the user interface
    def initUI(self):
        """Initializes the user interface components."""
        self.text_area = QTextEdit(self)  # Create a QTextEdit widget for text editing
        self.setCentralWidget(self.text_area)  # Set the text area as the central widget
        self.setWindowTitle("Text Editor")  # Set window title
        self.setGeometry(100, 100, 600, 400)  # Set window size and position

        # Create actions for the menu bar
        new_action = QAction('New', self)
        new_action.triggered.connect(self.new_file)
        open_action = QAction('Open', self)
        open_action.triggered.connect(self.open_file)
        save_action = QAction('Save', self)
        save_action.triggered.connect(self.save_file)
        exit_action = QAction('Exit', self)
        exit_action.triggered.connect(self.close)

        # Create a menu bar and add file menu
        menu_bar = self.menuBar()
        file_menu = menu_bar.addMenu('File')
        file_menu.addAction(new_action)
        file_menu.addAction(open_action)
        file_menu.addAction(save_action)
        file_menu.addAction(exit_action)

    # Method to create a new file
    def new_file(self):
        """Creates a new file."""
        self.text_area.clear()  # Clear the text area

    # Method to open an existing file
    def open_file(self):
        """Opens an existing text file."""
        file_path, _ = QFileDialog.getOpenFileName(self, 'Open File', '', 'Text Files (*.txt);;All Files (*)')
        if file_path:
            try:
                # Read the file and display its content
                with open(file_path, 'r') as file:
                    self.text_area.setText(file.read())
                self.setWindowTitle(f"Text Editor - {file_path}")  # Update the window title
            except Exception as e:
                QMessageBox.warning(self, 'Error', f"Failed to open file: {e}")

    # Method to save the current file
    def save_file(self):
        """Saves the current text content to a file."""
        file_path, _ = QFileDialog.getSaveFileName(self, 'Save File', '', 'Text Files (*.txt);;All Files (*)')
        if file_path:
            try:
                # Write the content of the text area to the file
                with open(file_path, 'w') as file:
                    file.write(self.text_area.toPlainText())
                self.setWindowTitle(f"Text Editor - {file_path}")  # Update the window title
            except Exception as e:
                QMessageBox.warning(self, 'Error', f"Failed to save file: {e}")

# Main function to run the application
def main():
    app = QApplication(sys.argv)  # Create the application
    editor = TextEditor()  # Create an instance of the TextEditor
    editor.show()  # Show the text editor window
    sys.exit(app.exec_())  # Run the application loop

# Run the application
if __name__ == '__main__':
    main()  

Output:

Python: Basic Text Editor Using PyQt5. 

Explanation

  • Imports PyQt5 modules for GUI development.
  • Class TextEditor:
    • Inherits from QMainWindow to create the main window of the text editor.
    • __init__(): Initializes the text editor and calls initUI() to set up the GUI.
    • initUI(): Sets up the text area and menu bar with actions (New, Open, Save, Exit).
    • new_file(): Clears the text area to create a new file.
    • open_file(): Opens a file dialog to select and display an existing file.
    • save_file(): Opens a file dialog to save the current text content.
  • Main Function main():
    • Creates the application and the text editor instance.
    • Displays the text editor window and starts the application loop.
  • Summary:
    • Solution 1 (Tkinter): Creates a basic text editor using tkinter, which is suitable for simple applications with a minimal learning curve.
    • Solution 2 (PyQt5): Provides a more advanced GUI using PyQt5, which offers greater flexibility and more features for creating modern applications.


Become a Patron!

Follow us on Facebook and Twitter for latest update.

It will be nice if you may share this link in any developer community or anywhere else, from where other developers may find this content. Thanks.

https://w3resource.com/projects/python/python-basic-text-editor-project.php