rendered paste bodyimport random
from Tkinter import *
from tkFileDialog import *
from tkMessageBox import *
class Data: pass
def bind_mnuFileNew_Click(*args): mnuFileNew_Click()
def bind_mnuFileOpen_Click(*args): mnuFileOpen_Click()
def bind_mnuFileSave_Click(*args): mnuFileSave_Click()
def bind_Quit(*args): Data.window.destroy()
def bind_mnuEditUndo_Click(*args): mnuEditUndo_Click()
def bind_mnuEditRedo_Click(*args): mnuEditRedo_Click()
def bind_mnuEditCut_Click(*args): mnuEditCut_Click()
def bind_mnuEditCopy_Click(*args): mnuEditCopy_Click()
def bind_mnuEditPaste_Click(*args): mnuEditPaste_Click()
def bind_mnuEditSelectAll(*args): mnuEditSelectAll()
def bind_mnuSearchFind_Click(*args): mnuSearchFind_Click()
def bind_mnuSearchReplace_Click(*args): mnuSearchReplace_Click()
def mnuFileNew_Click():
Data.textedit.delete("1.0",END)
def mnuFileExit_Click():
Data.window.destroy()
def mnuFileOpen_Click():
fname = askopenfilename()
if fname is not ():
filedata = open(fname,'rU')
if filedata:
filelines=filedata.readlines()
filedata.close()
Data.textedit.delete("1.0",END)
for line in filelines:
Data.textedit.insert(END, '%s' % (line))
def mnuFileSave_Click():
fname = asksaveasfilename()
if fname:
filedata = open(fname, 'w')
if filedata:
print>>filedata, Data.textedit.get("1.0", END)
filedata.close()
def mnuSearchFind_Click():
Data.checkvalue = 0
Data.window2 = Toplevel()
Data.window2.title('Find')
sw = Data.window2.winfo_screenwidth()
sh = Data.window2.winfo_screenheight()
ww = 300
wh = 100
wx = sw/2 - ww/2
wy = sh/2 - wh/2
Data.window2.geometry('%dx%d+%d+%d' %(ww,wh,wx,wy))
Data.entry = Entry(Data.window2)
Data.entry.focus()
Data.entry.grid(row=1)
Data.check = Checkbutton(Data.window2, text='Ignore Case', command=Nocase)
Data.check.grid(row=2)
Data.find = Button(Data.window2, text='Find', command=Search)
Data.find.grid(row=3)
Data.window2.mainloop()
def Nocase():
Data.checkvalue = 1
def Search():
searchline = '1.0'
e = Data.entry.get()
Data.textedit.tag_remove('found', '1.0', END)
while True:
if Data.checkvalue == 1:
Data.checkvalue = 0
searchline = Data.textedit.search(e, searchline, nocase=1, stopindex=END)
if not searchline: break
preline = '%s+%dc' %(searchline, len(e))
Data.textedit.tag_add('found', searchline, preline)
searchline = preline
else:
searchline = Data.textedit.search(e, searchline, stopindex=END)
if not searchline: break
preline = '%s+%dc' %(searchline, len(e))
Data.textedit.tag_add('found', searchline, preline)
searchline = preline
Data.textedit.tag_config('found', background='yellow')
Data.window2.destroy()
def mnuEditCut_Click():
Data.window.clipboard_clear()
text = Data.textedit.selection_get()
Data.window.clipboard_append(text)
Data.textedit.delete(SEL_FIRST, SEL_LAST)
def mnuEditCopy_Click():
Data.window.clipboard_clear()
text = Data.textedit.selection_get()
Data.window.clipboard_append(text)
def mnuEditPaste_Click():
text = Data.window.selection_get(selection="CLIPBOARD")
Data.textedit.insert(INSERT, text)
def mnuEditUndo_Click():
pass
def mnuEditRedo_Click():
pass
def mnuSearchReplace_Click():
pass
def Help():
showwarning('',random.choice(["You don't need help idiot! It's a text editor! Figure it Out!","You want me to spoon feed it to you?","Oh come on. You have got to be kidding. Help? For a text editor?","n00b"]))
def About():
showinfo('','Created by Michael Cusack and Richard Marks\n Copyright NOGDUS 2007')
def mnuEditSelectAll():
Data.textedit.tag_add(SEL, '1.0', END)
def main():
Data.window = Tk()
Data.window.title('NOGDUS Editor')
# get the screen width and height
sw = Data.window.winfo_screenwidth()
sh = Data.window.winfo_screenheight()
# size that we want our window
ww = 600
wh = 400
# to center the window on the screen
wx = sw/2 - ww/2
wy = sh/2 - wh/2
# tell the window to resize itself
Data.window.geometry('%dx%d+%d+%d' % (ww,wh,wx,wy))
# create a menu bar
Data.mainmenu = Menu(Data.window)
# create a file menu
mnuFile = Menu(Data.mainmenu, tearoff=0)
mnuFile.add_command(label='New Ctrl+N', command=mnuFileNew_Click)
mnuFile.add_command(label='Open Ctrl+O', command=mnuFileOpen_Click)
mnuFile.add_command(label='Save Ctrl+S', command=mnuFileSave_Click)
mnuFile.add_separator()
mnuFile.add_command(label='Exit Ctrl+Q', command=mnuFileExit_Click)
mnuEdit = Menu(Data.mainmenu, tearoff=0)
mnuEdit.add_command(label='Undo Ctrl+z', command=mnuEditUndo_Click)
mnuEdit.add_command(label='Redo Ctrl+y', command=mnuEditRedo_Click)
mnuEdit.add_separator()
mnuEdit.add_command(label='Cut Ctrl+X', command=mnuEditCut_Click)
mnuEdit.add_command(label='Copy Ctrl+C', command=mnuEditCopy_Click)
mnuEdit.add_command(label='Paste Ctrl+V', command=mnuEditPaste_Click)
mnuEdit.add_separator()
mnuEdit.add_command(label='Select All Ctrl+A', command=mnuEditSelectAll)
mnuSearch = Menu(Data.mainmenu, tearoff=0)
mnuSearch.add_command(label='Find Ctrl+F', command=mnuSearchFind_Click)
mnuSearch.add_command(label='Replace Ctrl+H', command=mnuSearchReplace_Click)
mnuHelp = Menu(Data.mainmenu, tearoff=0)
mnuHelp.add_command(label='Help', command=Help)
mnuHelp.add_separator()
mnuHelp.add_command(label='About', command=About)
# add the file menu to the main menu
Data.mainmenu.add_cascade(label='File', menu=mnuFile)
Data.mainmenu.add_cascade(label='Edit', menu=mnuEdit)
Data.mainmenu.add_cascade(label='Search', menu=mnuSearch)
Data.mainmenu.add_cascade(label='Help', menu=mnuHelp)
# add the main menu to the window
Data.window.config(menu=Data.mainmenu)
# text editor
Data.textedit = Text(Data.window)
# bind keys to menu
Data.textedit.bind('<Control-KeyPress-n>', bind_mnuFileNew_Click)
Data.textedit.bind('<Control-KeyPress-o>', bind_mnuFileOpen_Click)
Data.textedit.bind('<Control-KeyPress-s>', bind_mnuFileSave_Click)
Data.textedit.bind('<Control-KeyPress-q>', bind_Quit)
Data.textedit.bind('<Control-KeyPress-z>', bind_mnuEditUndo_Click)
Data.textedit.bind('<Control-KeyPress-y>', bind_mnuEditRedo_Click)
Data.textedit.bind('<Control-KeyPress-c>', bind_mnuEditCopy_Click)
Data.textedit.bind('<Control-KeyPress-x>', bind_mnuEditCut_Click)
Data.textedit.bind('<Control-KeyPress-v>', bind_mnuEditPaste_Click)
Data.textedit.bind('<Control-KeyPress-a>', bind_mnuEditSelectAll)
Data.textedit.bind('<Control-KeyPress-f>', bind_mnuSearchFind_Click)
Data.textedit.bind('<Control-KeyPress-h>', bind_mnuSearchReplace_Click)
# text editor scrollbar
Data.textedit_vsb = Scrollbar(Data.window)
Data.textedit_vsb.config(command=Data.textedit.yview)
Data.textedit.config(yscrollcommand=Data.textedit_vsb.set)
Data.textedit.grid(column=1, row=1)
Data.textedit_vsb.grid(column=2, row=1, sticky=N+S)
# start the main loop
Data.textedit.focus()
Data.window.mainloop()
if __name__=='__main__': main()