#!/usr/bin/env python import tkinter as tk from tkinter.filedialog import askopenfilename, asksaveasfilename class BtnFrame(tk.Frame): def __init__(self, master, *args, **kwargs): super().__init__(master, *args, **kwargs) self.btn_open = tk.Button(self, text="Open", command=master.open_file) self.btn_save = tk.Button(self, text="Save As...", command=master.save_file) self.btn_open.grid(row=0, column=0, sticky="ew", padx=5, pady=5) self.btn_save.grid(row=1, column=0, sticky="ew", padx=5) class MainWin(tk.Tk): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.title("Simple Text Editor") self.rowconfigure(0, minsize=800, weight=1) self.columnconfigure(1, minsize=800, weight=1) self.txt_edit = tk.Text(self) self.frm_buttons = BtnFrame(self) self.frm_buttons.grid(row=0, column=0, sticky="ns") self.txt_edit.grid(row=0, column=1, sticky="nsew") def open_file(self): """Open a file for editing.""" filepath = askopenfilename( filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")] ) if not filepath: return self.txt_edit.delete("1.0", tk.END) with open(filepath, mode="r", encoding="utf-8") as input_file: text = input_file.read() self.txt_edit.insert(tk.END, text) self.title(f"Simple Text Editor - {filepath}") def save_file(self): """Save the current file as a new file.""" filepath = asksaveasfilename( defaultextension=".txt", filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")], ) if not filepath: return with open(filepath, mode="w", encoding="utf-8") as output_file: text = self.txt_edit.get("1.0", tk.END) output_file.write(text) self.title(f"Simple Text Editor - {filepath}") if __name__ == '__main__': MainWin().mainloop()