from customtkinter import * from tkinter.filedialog import askopenfilename, asksaveasfilename class Notepad(CTk): def __init__(self): """Initialize the Notepad application.""" super().__init__() self.title("Notepad") self.iconbitmap("images/notepad.ico") self.geometry("600x600") self.configure(padx=10, pady=10) # file path self.file = None # Create a Frame for the menu and textarea self.frame = CTkFrame(self) self.frame.pack(fill="both", expand=True, padx=10, pady=10) # file menu self.File_var = StringVar(value="File") self.filemenu = CTkOptionMenu(self.frame,values=["File", "New", "Open", "Save"], command=self.file_menu_callback, variable=self.File_var,button_color="black", fg_color="black") self.filemenu.grid(row=0, column=0, padx=10, pady=10, sticky="w") # Textbox to get text self.textarea = CTkTextbox(self.frame, font=("Consolas", 11)) self.textarea.grid(row=1,column=0,columnspan=2, padx=10, pady=10, sticky="nsew") # create CTk scrollbar # It only appears in full screen mode ctk_textbox_scrollbar = CTkScrollbar(self.frame, command=self.textarea.yview) ctk_textbox_scrollbar.grid(row=1,column=1, sticky="ns") # connect textbox scroll event to CTk scrollbar self.textarea.configure(yscrollcommand=ctk_textbox_scrollbar.set) # Bind the <Configure> event to the resize_textarea function self.bind("<Configure>", self.resize_textarea) # event is needed to bind it to resize event def resize_textarea(self, event): """Adjust the size of the textarea based on the available space.""" # Calculate the new width and height for the textarea based on the available space available_width = self.winfo_width() - 40 # Subtract the padding available_height = self.winfo_height() - 40 # Subtract the padding # Update the width and height of the textarea self.textarea.configure(width=available_width, height=available_height) def file_menu_callback(self,choice): """Handle the file menu commands.""" if choice=='New': self.new() elif choice=='Open': self.open() elif choice=='Save': self.save() def new(self): """Create a new file.""" self.file = None self.title("Notepad") self.textarea.focus_set() self.textarea.delete("0.0", 'end') def open(self): """Open an existing file.""" self.file = askopenfilename(defaultextension=".txt", filetypes=[("All Files", "*.*"), ("Text Documents", "*.txt")]) if self.file == "": self.file = None else: self.title(os.path.basename(self.file)) self.textarea.delete("0.0", 'end') with open(self.file, 'r') as f: self.textarea.insert("0.0", f.read()) def save(self): """Save the current file.""" if self.file == None: self.file = asksaveasfilename(initialfile = 'Untitled.txt', defaultextension=".txt", filetypes=[("All Files", "*.*"), ("Text Documents", "*.txt")]) if self.file =="": self.file = None else: with open(self.file, 'w') as f: f.write(self.textarea.get("0.0", "end")) if __name__ == '__main__': app = Notepad() app.mainloop()