From f046ee51a0646cd202ccba402fd50962faf7153e Mon Sep 17 00:00:00 2001 From: jmartinez281 Date: Sat, 26 Jul 2025 20:56:16 -0400 Subject: [PATCH] restructured files "I added keyboard shortcuts for new, open, save, and exit functionalities. Also implemented a custom flag to track text modifications and a prompt for unsaved changes on exit." --- Notepad-repo/README.md | 16 ++++++ Notepad-repo/Screenshot.png | Bin 0 -> 7538 bytes Notepad-repo/main.py | 110 ++++++++++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 Notepad-repo/README.md create mode 100644 Notepad-repo/Screenshot.png create mode 100644 Notepad-repo/main.py diff --git a/Notepad-repo/README.md b/Notepad-repo/README.md new file mode 100644 index 0000000..96aee3c --- /dev/null +++ b/Notepad-repo/README.md @@ -0,0 +1,16 @@ +# Notepad + +A GUI based notepad using python tkinter + +**Operations** + +- Save file + +- New file + +- Cut + +- Copy + +- Paste + diff --git a/Notepad-repo/Screenshot.png b/Notepad-repo/Screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..8a8c95a6d8439a5752acece6c77edefaadf7dd96 GIT binary patch literal 7538 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 literal 0 HcmV?d00001 diff --git a/Notepad-repo/main.py b/Notepad-repo/main.py new file mode 100644 index 0000000..4a0d69d --- /dev/null +++ b/Notepad-repo/main.py @@ -0,0 +1,110 @@ +# Author: Aashish Sharma +# Github: https://github.com/aasis2520c +# Note pad using tkinter in python + +import os +from tkinter.constants import BOTH, END, RIGHT, Y +from tkinter import Menu, Scrollbar, Text, Tk, messagebox +from tkinter.filedialog import askopenfilename, asksaveasfilename + + +class Notepad(Tk): + """To design GUI based notepad using tkinter""" + + def __init__(self): + super().__init__() + self.geometry("744x650") + self.title("Notepad") + self.text = None # will be initialized in text_area() + self.file = None # instance variable to store file path + + def text_area(self): + """Creates editable text area""" + self.text = Text(self, undo=True) + self.text.pack(expand=True, fill=BOTH) + # Setting scroll bar + scrollbar = Scrollbar(self.text, command=self.text.yview) + scrollbar.pack(side=RIGHT, fill=Y) + self.text.config(yscrollcommand=scrollbar.set) + self.file = None + + def __new_file(self): + # create new file and pass title as "Untitled" + self.title("Untitled-Notepad") + self.file = None + self.text.delete(1.0, END) + + def __save_file(self): + """Saves Opened file""" + if self.file == None: + self.file = asksaveasfilename(initialfile="Untitiled.txt", defaultextension=".txt", filetypes=[ + ("All Files", "*.*"), ("Text Documents", "*.txt")]) + if self.file == "": + self.file = None + else: + # Open file as write mode --> add user inputted text --> save it --> change window title as file title + txt = open(self.file, "w") + txt.write(self.text.get(1.0, END)) + txt.close() + self.title(os.path.basename(self.file) + "-Notepad") + else: + txt = open(self.file, "w") + txt.write(self.text.get(1.0, END)) + txt.close() + + def __open_file(self): + """Opens the save file""" + self.file = askopenfilename(defaultextension=".txt", filetypes=[ + ("All Files", "*.*"), ("Text Documents", "*.txt")]) + if self.file == "": + self.file = None + + else: + # Open file as read mode --> add file text into editor text area + self.title(os.path.basename(self.file) + "-Notepad") + self.text.delete(1.0, END) + txt = open(self.file, "r") + self.text.insert(1.0, txt.read()) + txt.close() + + def menu_create(self): + # Creating main menu + menu_bar = Menu(self) + file_menu = Menu(menu_bar, tearoff=0) + edit_menu = Menu(menu_bar, tearoff=0) + help_menu = Menu(menu_bar, tearoff=0) + + # adding command to file menu + 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) + menu_bar.add_cascade(label="File", menu=file_menu) + + # adding command to edit menu + edit_menu.add_command( + label="Cut", command=lambda: self.text.event_generate(("<>"))) + edit_menu.add_command( + label="Copy", command=lambda: self.text.event_generate(("<>"))) + edit_menu.add_command( + label="Paste", command=lambda: self.text.event_generate(("<>"))) + menu_bar.add_cascade(label="Edit", menu=edit_menu) + + # adding command to help menu + help_menu.add_command(label="Online Manual", command=lambda: messagebox.showinfo( + "Online Manual", "Please visit 'https://github.com/aasis2520c'")) + help_menu.add_command(label="Support us", command=lambda: messagebox.showinfo( + "Supoort us", "Great! Rate us in Store")) + help_menu.add_command(label="Report Bug", command=lambda: messagebox.showinfo( + "Report us", "Please, leave your issue in 'https://github.com/aasis2520c'")) + help_menu.add_command(label="About", command=lambda: messagebox.showinfo( + "About us", "Developed and Designed by Aashish <3")) + menu_bar.add_cascade(label="Help", menu=help_menu) + menu_bar.add_command(label="Exit", command=self.destroy) + self.config(menu=menu_bar) + + +if __name__ == '__main__': + window = Notepad() + window.text_area() + window.menu_create() + window.mainloop()