diff --git a/Extra/Edit Menu.png b/Extra/Edit Menu.png deleted file mode 100644 index 9e704f5..0000000 Binary files a/Extra/Edit Menu.png and /dev/null differ diff --git a/Extra/File Menu.png b/Extra/File Menu.png deleted file mode 100644 index fd9f4d8..0000000 Binary files a/Extra/File Menu.png and /dev/null differ diff --git a/Extra/Main.png b/Extra/Main.png deleted file mode 100644 index 2b7aa9e..0000000 Binary files a/Extra/Main.png and /dev/null differ diff --git a/Extra/image.png b/Extra/image.png new file mode 100644 index 0000000..5aa484b Binary files /dev/null and b/Extra/image.png differ diff --git a/Extra/image2.png b/Extra/image2.png new file mode 100644 index 0000000..e6328cc Binary files /dev/null and b/Extra/image2.png differ diff --git a/Extra/image3.png b/Extra/image3.png new file mode 100644 index 0000000..597cd3a Binary files /dev/null and b/Extra/image3.png differ diff --git a/Notepad.ico b/Notepad.ico new file mode 100644 index 0000000..a65235b Binary files /dev/null and b/Notepad.ico differ diff --git a/README.md b/README.md index 3ce3a8c..c404171 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,183 @@ -

NOTEPAD šŸ““

+Here’s the updated README file incorporating the new features: -

— using PYTHON & TKINTER —

+--- +

NotePy šŸ““

+ +

— An Enhanced Version of Notepad (originally by pratyushjain122) Built with Python & Tkinter —

+ +### šŸ”„ NotePy transforms the original notepad-python project by pratyushjain122 into a not-so-modern (but still nostalgic) yet fully-featured text editor designed for everyday use. It's a more efficient replacement for Notepad, but with a modern twist. Because why settle for ordinary when you can have extraordinary? + # Latest Update: Version 1.3 - New Features and Window Adjustment   + ## What is Tkinter? -#### šŸ‘‰ Tkinter is Python's de-facto standard GUI (Graphical User Interface) package. -#### šŸ‘‰ Tkinter is not the only GuiProgramming toolkit for Python. It is however the most commonly used one. +#### šŸ‘‰ Tkinter is Python's standard GUI (Graphical User Interface) toolkit. +#### šŸ‘‰ While there are other GUI toolkits for Python, Tkinter is the go-to choice due to its simplicity and seamless integration with Python. + +  + +## What is NotePy? +NotePy is an upgraded text editor based on the original notepad-python project. It has a sleek user interface and enhanced features, all built using Python and Tkinter. It’s like Notepad, but without being created by a company that charges you for an operating system šŸ’€. (You probably know what it is, MichealSoft) + +  + +## Features + +### Original Features (from [pratyushjain122's notepad-python project](https://github.com/pratyushjain122/notepad-python)): + +1. **New File**: Create a new, blank document. Self-Explainatory +2. **Open File**: Open and load an existing file. Self-Explainatory +3. **Save File**: Save your document. Imagine losing your 2000 lines of code just because of a cat stepping on your power button. (My cat btw) +4. **Cut**: Cut selected text. Self-Explainatory (Haven't came up with a new joke **yet**) +5. **Copy**: Copy selected text. Because good ideas deserve to be duplicated, like that one meme you keep sending to everyone. +6. **Paste**: Paste text from the clipboard. Reuse like a pro—just don’t overdo it like that one guy at the buffet. (That one guy at my nearby buffet restaurant) +7. **View Help**: Access help information for the application. + +### New Features in NotePy: + +1. **Enhanced Edit Menu**: Now includes "Undo," "Redo," "Find,", "Replace" and "Select All" features. It’s like having an editor’s undo button for life. Just don’t try to use it on your last relationship. (lol) +2. **Convenient Hotkeys**: Adds various hotkeys to streamline your workflow: + **For Example:** + - **New Window**: Open a new instance of the application (Ctrl+Shift+N). + - **Save As**: Save the current file under a new name (Ctrl+Shift+S). + - **Select All**: Select all text in the editor (Ctrl+A). +4. **File Association**: Ability to open a `.txt` file directly via "Open with NotePy" from the file context menu. +5. **Status Bar**: Displays real-time document information, including: + - Cursor position (line and column number). Never lose your place again—unless you accidentally move your cursor to another galaxy. šŸ–±ļø + - Word count. Because sometimes you just need to know how many words you’ve written—and how many you still owe your novel. šŸ’€ + - Line endings (e.g., CRLF). For the technical wizards out there. It’s like knowing whether to use a fork or a spoon. + - File encoding (e.g., UTF-8). +6. **Format Menu**: Adjust the global font style and size. +7. **Enhanced File Menu**: With new indispensable features like "New Window" and "Save As" to enhance user's workflow. +  + +## What's Included in This Project šŸ‘œ + +### Portable Version + +- **Description**: A download-and-play version pre-compiled into an executable (.exe) that runs on any Windows machine without installation. It’s the software equivalent of a Swiss Army knife—versatile and always ready. Perfect for when you need a quick fix without the fuss! +- **Use Case**: Ideal for those who prefer a plug-and-play application or want to keep it on a USB drive. No installation required—just run and go! Like a fast-**text** drive-thru. (Get it? Fast-Food drive thru for text editing) + +### Install Version + +- **Description**: Install NotePy on your machine for a smoother workflow. One-click, and it’s on your device—no more searching for the portable file. Installation makes it as easy as pie. Just don’t ask us to bake the pie! +- **Use Case**: Ideal for those who want NotePy integrated into their system for everyday use. Installation makes it easy to access NotePy without the hassle of finding and running the portable version. + +### Source Code + +- **Description**: The complete source code for NotePy, available for download and compilation. Obviously, what would you expect more from an open source project? (lol) It’s like a DIY kit for tech enthusiasts! +- **Use Case**: Perfect for those who prefer to compile the software themselves, have trust issues with those .exes, or need to run it on different operating systems. Great for the tryhards who compile Gentoo 10 times a day. (They exist, and they’re awesome!)   -## GUI 🧩 -#### A GUI (graphical user interface) is a system of interactive visual components for computer software. A GUI displays objects that convey information, and represent actions that can be taken by the user. The objects change color, size, or visibility when the user interacts with them. +## GUI Overview 🧩 + +A GUI (Graphical User Interface) allows users to interact with software through visual elements like buttons, text fields, and menus. +## We tried our best to replicate the classic Notepad GUI, but remember, it's not a 100% accurate replica because God knows the Notepad source code. It's created by a company that creates proprietary software anyway. šŸ’€   -## WORKING šŸ‘·ā€ā™‚ļø -#### ~ After running the program a simple GUI window pops out. +## How It Works šŸ‘·ā€ā™‚ļø + +#### ~ When you launch NotePy, a user-friendly GUI window will open, and you’ll be ready to write and edit text just like in any standard notepad application. It’s as easy as pie, if pie were made of code. (lol)

-main page +Main Page

-#### ~ You can write anything like any normal notepad here. -   -### ~ This is the File Menu šŸ‘‡ + +### File Menu šŸ‘‡ +
-File Menu +File Menu + +#### ~ The File Menu lets you create a new file, open an existing one, save the current file, or exit the application. Plus, new keybindings to make life easier: +- **New Window** (Ctrl+Shift+N) +- **Save As** (Ctrl+Shift+S) +- **Select All** (Ctrl+A) -#### ~ In this window you can create a 'New' file, 'Open' an existing file or 'Save' the current file. You can also Exit the current window.
  -### ~ This is the Edit Menu šŸ‘‡ +### Edit Menu šŸ‘‡ +
-Edit Menu +Edit Menu -#### ~ In this window you can 'Cut' , 'Copy' or 'Paste' the content from or into the current file. +#### ~ The Edit Menu originally provided 'Cut,' 'Copy,' and 'Paste.' NotePy has added 'Undo,' 'Redo,' 'Find,' and 'Replace,' along with handy keybindings.   -## ContributorsšŸ‘Øā€šŸ’» +### Format Menu šŸ‘‡ + +#### ~ The Format Menu allows you to adjust the 'Font Size' and 'Font Style' of your text. Make your text look just the way you want it—because even text needs a makeover now and then. + +  + +### Help Menu šŸ‘‡ + +#### ~ The Help Menu provides an 'About NotePy' option for more information about the application and its creator. + +  + +## How to Use (Portable Version) + +1. **Run the Application**: Launch the script or executable file to open NotePy. No installation required—just like magic! +2. **Create or Open Files**: Use the File Menu to start a new document or open an existing one. +3. **Edit Text**: Utilize the Edit Menu for text operations. +4. **Adjust Formatting**: Access the Format Menu to modify text size and style. +5. **Find and Replace**: Use the Find and Replace dialog to search and replace text. +6. **Check Status**: Monitor the status bar for real-time document details. + **And more features waiting for you to explore** + +## For Installer Version + +1. **Install The App**: Run the installer and follow the prompts to install NotePy on your machine. It’s like inviting NotePy to live on your computer. +2. **Launch NotePy**: Once installed, start NotePy from your desktop or start menu and begin using it. Easy peasy—like pie! + +  + +## Code Overview + +Here's a summary of the core functionalities: + +- **Window Initialization**: Configures the main application window, including size, title, and alignment. +- **Menu Setup**: Creates menus for file operations, text editing, formatting, and help. +- **Text Area**: Provides a resizable text area with vertical scrolling. +- **File Operations**: + - **New File**: Clears the current text area and resets the file name. + - **Open File**: Opens a file dialog to load content into the editor. + - **Save File**: Saves the current content to a file with options for naming and location. + - **New Window**: Opens a new instance of the application. + - **Save As**: Save the current file under a new name. +- **Text Editing**: + - **Cut, Copy, Paste**: Standard text editing functions. + - **Undo, Redo**: Reverses or re-applies recent changes. + - **Find and Replace**: Allows interactive text searching and replacement. + - **Select All**: Selects all text in the editor. +- **Formatting**: + + + - **Font Size and Style**: Adjusts text appearance. +- **Status Bar**: Displays real-time information about the document. Never lose track of what’s important—like having a GPS for your text. + +  + +## Contributors šŸ‘Øā€šŸ’» + +--- +## SUPPORT ā˜• +Support the original creator by buying them a coffee so they can create more impressive projects: + +- **Pratyush Jain**: [GitHub Profile](https://github.com/pratyushjain122) + +--- diff --git a/source_file.py b/source_file.py index 789fb3c..8c9c6dd 100644 --- a/source_file.py +++ b/source_file.py @@ -1,163 +1,223 @@ -import tkinter +import tkinter as tk +from tkinter import ttk +from tkinter.messagebox import showinfo +from tkinter.filedialog import askopenfilename, asksaveasfilename import os -import webbrowser -from tkinter import * -from tkinter.messagebox import * -from tkinter.filedialog import * - -class Notepad: - - __root = Tk() - # default window width and height - __thisWidth = 300 - __thisHeight = 300 - __thisTextArea = Text(__root) - __thisMenuBar = Menu(__root) - __thisFileMenu = Menu(__thisMenuBar, tearoff=0) - __thisEditMenu = Menu(__thisMenuBar, tearoff=0) - __thisHelpMenu = Menu(__thisMenuBar, tearoff=0) - # To add scrollbar - __thisScrollBar = Scrollbar(__thisTextArea) - __file = None - - def __init__(self,**kwargs): - # Set icon - try: - self.__root.wm_iconbitmap("Notepad.ico") - except: - pass - # Set window size (the default is 300x300) - try: - self.__thisWidth = kwargs['width'] - except KeyError: - pass - - try: - self.__thisHeight = kwargs['height'] - except KeyError: - pass - - # Set the window text - self.__root.title("Untitled - Notepad") - # Center the window - screenWidth = self.__root.winfo_screenwidth() - screenHeight = self.__root.winfo_screenheight() - # For left-alling - left = (screenWidth / 2) - (self.__thisWidth / 2) - # For right-allign - top = (screenHeight / 2) - (self.__thisHeight /2) - # For top and bottom - - self.__root.geometry('%dx%d+%d+%d' % (self.__thisWidth, - self.__thisHeight, - left, top)) - # To make the textarea auto resizable - self.__root.grid_rowconfigure(0, weight=3) - self.__root.grid_columnconfigure(0, weight=3) - - # Add controls (widget) - self.__thisTextArea.grid(sticky = N + E + S + W) - # To open new file - self.__thisFileMenu.add_command(label="New", - command=self.__newFile) - # To open a already existing file - self.__thisFileMenu.add_command(label="Open", - command=self.__openFile) - # To save current file - self.__thisFileMenu.add_command(label="Save", - command=self.__saveFile) - # To create a line in the dialog - self.__thisFileMenu.add_separator() - self.__thisFileMenu.add_command(label="Exit", - command=self.__quitApplication) - self.__thisMenuBar.add_cascade(label="File", - menu=self.__thisFileMenu) - # To give a feature of cut - self.__thisEditMenu.add_command(label="Cut", - command=self.__cut) - # to give a feature of copy - self.__thisEditMenu.add_command(label="Copy", - command=self.__copy) - # To give a feature of paste - self.__thisEditMenu.add_command(label="Paste", - command=self.__paste) - # To give a feature of editing - self.__thisMenuBar.add_cascade(label="Edit", - menu=self.__thisEditMenu) - # To create a feature of description of the notepad - self.__thisHelpMenu.add_command(label="View Help", - command=self.__showAbout) - self.__thisMenuBar.add_cascade(label="Help", - menu=self.__thisHelpMenu) - self.__root.config(menu=self.__thisMenuBar) - self.__thisScrollBar.pack(side=RIGHT,fill=Y) - # Scrollbar will adjust automatically according to the content - self.__thisScrollBar.config(command=self.__thisTextArea.yview) - self.__thisTextArea.config(yscrollcommand=self.__thisScrollBar.set) - def __quitApplication(self): - self.__root.destroy() - # exit() - def __showAbout(self): - showinfo("Notepad",view =webbrowser.open("https://www.bing.com/search?q=get+help+with+notepad+in+windows+10&filters=guid:%224466414-en-dia%22%20lang:%22en%22&form=T00032&ocid=HelpPane-BingIA")) - def __openFile(self): - self.__file = askopenfilename(defaultextension=".txt", - filetypes=[("All Files","*.*"), - ("Text Documents","*.txt")]) - if self.__file == "": - # no file to open - self.__file = None - else: - # Try to open the file - # set the window title - self.__root.title(os.path.basename(self.__file) + " - Notepad") - self.__thisTextArea.delete(1.0,END) - file = open(self.__file,"r") - self.__thisTextArea.insert(1.0,file.read()) - file.close() - - def __newFile(self): - self.__root.title("Untitled - Notepad") - self.__file = None - self.__thisTextArea.delete(1.0,END) - - def __saveFile(self): - - if self.__file == None: - # Save as new file - self.__file = asksaveasfilename(initialfile='Untitled.txt', - defaultextension=".txt", - filetypes=[("All Files","*.*"), - ("Text Documents","*.txt")]) - - if self.__file == "": - self.__file = None - else: - # Try to save the file - file = open(self.__file,"Untitled") - file.write(self.__thisTextArea.get(1.0,END)) - file.close() - - # Change the window title - self.__root.title(os.path.basename(self.__file) + " - Notepad") - - else: - file = open(self.__file,"w") - file.write(self.__thisTextArea.get(1.0,END)) - file.close() - - def __cut(self): - self.__thisTextArea.event_generate("<>") - - def __copy(self): - self.__thisTextArea.event_generate("<>") - - def __paste(self): - self.__thisTextArea.event_generate("<>") - - def run(self): - # Run main application - self.__root.mainloop() - -# Run main application -notepad = Notepad(width=600,height=400) -notepad.run() +from tkinter.simpledialog import askstring +import sys + +class NotePy: + def __init__(self, **kwargs): + # Initialize main window + self.__root = tk.Tk() + self.__root.title("Untitled - NotePy") + + # Set window size + self.__thisWidth = kwargs.get('width', 600) + self.__thisHeight = kwargs.get('height', 460) + + # Center the window + screenWidth = self.__root.winfo_screenwidth() + screenHeight = self.__root.winfo_screenheight() + left = (screenWidth / 2) - (self.__thisWidth / 2) + top = (screenHeight / 2) - (self.__thisHeight / 2) + self.__root.geometry(f'{self.__thisWidth}x{self.__thisHeight}+{int(left)}+{int(top)}') + + # Set icon (use a placeholder or remove if not available) + try: + self.__root.iconbitmap("NotePy.ico") + except tk.TclError: + pass + + # Create a frame for the text area and scrollbar + self.__mainFrame = ttk.Frame(self.__root) + self.__mainFrame.grid(sticky='nsew') + + # Create a frame for the status bar + self.__statusFrame = ttk.Frame(self.__root) + self.__statusFrame.grid(row=1, column=0, sticky='ew') + + # Create a text area with a scrollbar + self.__thisTextArea = tk.Text(self.__mainFrame, wrap='word', font=('Arial', 12)) + self.__thisScrollBar = ttk.Scrollbar(self.__mainFrame, orient='vertical', command=self.__thisTextArea.yview) + self.__thisTextArea.config(yscrollcommand=self.__thisScrollBar.set) + + # Pack widgets into the main frame + self.__thisTextArea.grid(row=0, column=0, sticky='nsew') + self.__thisScrollBar.grid(row=0, column=1, sticky='ns') + + # Configure row and column weights + self.__mainFrame.grid_rowconfigure(0, weight=1) + self.__mainFrame.grid_columnconfigure(0, weight=1) + + # Status bar elements + self.__statusBar = tk.Label(self.__statusFrame, text="Ln 1 | Col 1 | 100% | CRLF | UTF-8", anchor='w') + self.__statusBar.grid(row=0, column=0, sticky='ew') + + # Create menu bar + self.__thisMenuBar = tk.Menu(self.__root) + self.__root.config(menu=self.__thisMenuBar) + + # File menu + self.__thisFileMenu = tk.Menu(self.__thisMenuBar, tearoff=0) + self.__thisFileMenu.add_command(label="New", command=self.__newFile, accelerator="Ctrl+N") + self.__thisFileMenu.add_command(label="New Window", command=self.__newWindow, accelerator="Ctrl+Shift+N") + self.__thisFileMenu.add_command(label="Open", command=self.__openFile, accelerator="Ctrl+O") + self.__thisFileMenu.add_command(label="Save", command=self.__saveFile, accelerator="Ctrl+S") + self.__thisFileMenu.add_command(label="Save As", command=self.__saveAsFile, accelerator="Ctrl+Shift+S") + self.__thisFileMenu.add_separator() + self.__thisFileMenu.add_command(label="Exit", command=self.__quitApplication, accelerator="Ctrl+Q") + self.__thisMenuBar.add_cascade(label="File", menu=self.__thisFileMenu) + + # Edit menu + self.__thisEditMenu = tk.Menu(self.__thisMenuBar, tearoff=0) + self.__thisEditMenu.add_command(label="Cut", command=self.__cut, accelerator="Ctrl+X") + self.__thisEditMenu.add_command(label="Copy", command=self.__copy, accelerator="Ctrl+C") + self.__thisEditMenu.add_command(label="Paste", command=self.__paste, accelerator="Ctrl+V") + self.__thisEditMenu.add_command(label="Undo", command=self.__undo, accelerator="Ctrl+Z") + self.__thisEditMenu.add_command(label="Redo", command=self.__redo, accelerator="Ctrl+Y") + self.__thisEditMenu.add_command(label="Find", command=self.__findReplace, accelerator="Ctrl+F") + self.__thisEditMenu.add_command(label="Replace", command=self.__findReplace, accelerator="Ctrl+H") + self.__thisEditMenu.add_command(label="Select All", command=self.__selectAll, accelerator="Ctrl+A") + self.__thisMenuBar.add_cascade(label="Edit", menu=self.__thisEditMenu) + + # Format menu + self.__thisFormatMenu = tk.Menu(self.__thisMenuBar, tearoff=0) + self.__thisFormatMenu.add_command(label="Font Size", command=self.__setFontSize) + self.__thisFormatMenu.add_command(label="Font Style", command=self.__setFontStyle) + self.__thisMenuBar.add_cascade(label="Format", menu=self.__thisFormatMenu) + + # Help menu + self.__thisHelpMenu = tk.Menu(self.__thisMenuBar, tearoff=0) + self.__thisHelpMenu.add_command(label="About NotePy", command=self.__showAbout) + self.__thisMenuBar.add_cascade(label="Help", menu=self.__thisHelpMenu) + + # Initialize file variable + self.__file = None + self.__line_endings = "CRLF" + self.__encoding = "UTF-8" + + # Bind events + self.__thisTextArea.bind('', self.__updateStatusBar) + self.__root.bind_all('', lambda e: self.__newFile()) + self.__root.bind_all('', lambda e: self.__newWindow()) + self.__root.bind_all('', lambda e: self.__openFile()) + self.__root.bind_all('', lambda e: self.__saveFile()) + self.__root.bind_all('', lambda e: self.__saveAsFile()) + self.__root.bind_all('', lambda e: self.__quitApplication()) + self.__root.bind_all('', lambda e: self.__cut()) + self.__root.bind_all('', lambda e: self.__copy()) + self.__root.bind_all('', lambda e: self.__paste()) + self.__root.bind_all('', lambda e: self.__undo()) + self.__root.bind_all('', lambda e: self.__redo()) + self.__root.bind_all('', lambda e: self.__selectAll()) + self.__root.bind_all('', lambda e: self.__findReplace()) + self.__root.bind_all('', lambda e: self.__findReplace()) + + # Open file if provided as an argument (for "Open with NotePy" functionality) + if len(sys.argv) > 1: + self.__file = sys.argv[1] + self.__openFile(initial_open=True) + + def __newWindow(self): + os.system(f'python "{__file__}"') + + def __quitApplication(self): + self.__root.destroy() + + def __showAbout(self): + showinfo("NotePy", "Having trust issue with Microsoft Products? Here you are, a FREE and OPEN SOURCE Notepad created in Python! Created by: Long Do (http://longdo.pythonanywhere.com/)") + + def __openFile(self, initial_open=False): + if not initial_open: + self.__file = askopenfilename(defaultextension=".txt", filetypes=[("All Files", "*.*"), ("Text Documents", "*.txt")]) + if self.__file: + self.__root.title(os.path.basename(self.__file) + " - NotePy") + self.__thisTextArea.delete(1.0, tk.END) + with open(self.__file, "r", encoding=self.__encoding) as file: + self.__thisTextArea.insert(1.0, file.read()) + self.__updateStatusBar() + + def __newFile(self): + self.__root.title("Untitled - NotePy") + self.__file = None + self.__thisTextArea.delete(1.0, tk.END) + self.__updateStatusBar() + + def __saveFile(self): + if self.__file is None: + self.__saveAsFile() + else: + with open(self.__file, "w", encoding=self.__encoding) as file: + file.write(self.__thisTextArea.get(1.0, tk.END)) + self.__root.title(os.path.basename(self.__file) + " - NotePy") + + def __saveAsFile(self): + self.__file = asksaveasfilename(initialfile='Untitled.txt', defaultextension=".txt", filetypes=[("All Files", "*.*"), ("Text Documents", "*.txt")]) + if self.__file: + with open(self.__file, "w", encoding=self.__encoding) as file: + file.write(self.__thisTextArea.get(1.0, tk.END)) + self.__root.title(os.path.basename(self.__file) + " - NotePy") + + def __cut(self): + self.__thisTextArea.event_generate("<>") + + def __copy(self): + self.__thisTextArea.event_generate("<>") + + def __paste(self): + self.__thisTextArea.event_generate("<>") + + def __undo(self): + try: + self.__thisTextArea.edit_undo() + except tk.TclError: + pass + + def __redo(self): + try: + self.__thisTextArea.edit_redo() + except tk.TclError: + pass + + def __findReplace(self): + find_what = askstring("Find", "Enter text to find:") + replace_with = askstring("Replace", "Replace with (leave empty to skip):") + + text_content = self.__thisTextArea.get(1.0, tk.END) + self.__thisTextArea.delete(1.0, tk.END) + + if replace_with: + text_content = text_content.replace(find_what, replace_with) + + self.__thisTextArea.insert(1.0, text_content) + self.__updateStatusBar() + + def __selectAll(self): + self.__thisTextArea.tag_add('sel', '1.0', 'end') + + def __setFontSize(self): + size = askstring("Font Size", "Enter font size:") + if size and size.isdigit(): + self.__thisTextArea.config(font=("Arial", int(size))) + + def __setFontStyle(self): + style = askstring("Font Style", "Enter font style (e.g., bold, italic):") + if style: + current_font = self.__thisTextArea['font'].split() + if len(current_font) > 1: + current_font[-1] = style + else: + current_font.append(style) + self.__thisTextArea.config(font=" ".join(current_font)) + + def __updateStatusBar(self, event=None): + line, column = self.__thisTextArea.index(tk.INSERT).split('.') + self.__statusBar.config(text=f"Ln {line} | Col {column} | 100% | {self.__line_endings} | {self.__encoding}") + + def run(self): + self.__root.mainloop() + +if __name__ == '__main__': + app = NotePy() + app.run()