class writerKl(object): def __init__(self): import tkinter from tkinter import messagebox from tkinter import filedialog from tkinter import Tk from tkinter import Menu from tkinter import END
self.fileName = None self.saved = True self.app = tkinter.Tk() self.app.title("FenInst is another instance of the writerKl class") self.menuBar = tkinter.Menu(self.app) self.fileMenu = tkinter.Menu(self.menuBar, tearoff=0) self.fileMenu.add_command(label="New", command=self.newFile) self.fileMenu.add_command(label="Open", command=self.openFile) self.fileMenu.add_command(label="Save", command=self.saveFile) self.fileMenu.add_command(label="Save As", command=self.saveFileAs) self.fileMenu.add_separator() ; self.About = "A selfish tkinter text editor in 100 lines of python3 code.\n\n In fact this very ''About window'' also was modded using the selfish editor himself.\n\n Open the source ''writer.py'' to find out why this editor is seen as so 105x self-obsessed." self.fileMenu.add_command(label= "About", command=lambda: tkinter.messagebox.showinfo("About", self.About)) self.fileMenu.add_separator() self.fileMenu.add_command(label="Exit", command=self.onExit) self.menuBar.add_cascade( label="File", menu =self.fileMenu) self.app.config(menu=self.menuBar) self.app.bind('<Control-n>', self.newFile ) # key Bindings self.app.bind('<Control-o>', self.openFile) self.app.bind('<Control-s>', self.saveFile) self.app.bind('<Key>', self.setsavedFalse ) self.app.protocol("WM_DELETE_WINDOW", self.onExit) # save before exit? self.textf = tkinter.Text(self.app) # initializing text container self.textf.pack(expand=True, fill='both') # deploying text container self.textf.focus() self.app.mainloop() def newFile(self): import tkinter if not self.saved: save = self.promptToSave() if save: self.saveFile() elif self.save is None: return self.fileName = None self.textf.delete(0.0, tkinter.END) self.saved = True def openFile(self): import tkinter if not self.saved: self.save = self.promptToSave() if self.save: self.saveFile() elif self.save is None: return try: self.f = tkinter.filedialog.askopenfile( filetypes=[ ('all files', '*') , ('py files', '.py') ] ) if self.f: self.fileName = self.f.name self.t = self.f.read() self.textf.delete(0.0, tkinter.END) self.textf.insert(tkinter.END, self.t) self.saved = True except: tkinter.messagebox.showerror("Error", "Unable to open file.") def saveFile(self): import tkinter self.t = self.textf.get(0.0, tkinter.END) if self.fileName: self.f = open(self.fileName, "w") self.f.write(self.t) self.f.close() self.saved = True else: self.saveFileAs() def saveFileAs(self): import tkinter self.f = tkinter.filedialog.asksaveasfile(defaultextension=".txt", filetypes=[ ('all files', '*'),('py files', '.py') ]) self.t = self.textf.get(0.0, tkinter.END) if self.f: try: self.f.write(self.t) self.f.close( ) self.saved = True self.fileName=self.f.name except: tkinter.messagebox.showwarning("Error", "Unable to save file.") def onExit(self): import tkinter if not self.saved: self.save = self.promptToSave() if self.save: self.saveFile() elif self.save is None: return self.app.destroy() def setsavedFalse(self, key): import tkinter if (key.keysym.isalpha() or key.keysym.isdigit() or key.keysym in ["Return", "Tab", "Backspace", "Delete"]): self.saved = False # any key that changes text def promptToSave(self): import tkinter return tkinter.messagebox.askyesnocancel( "Save file?", "Do you want to save the current file?") if __name__ == '__main__' : import tkinter FenInst =writerKl() -- https://mail.python.org/mailman/listinfo/python-list