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

Reply via email to