a nice editor in 100 lines
Wu Xi
news at luegenpresse.edu
Sat Dec 30 17:02:00 EST 2017
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()
More information about the Python-list
mailing list