All pastes #741936 Raw Edit

Stuff

public text v1 · immutable
·published 2007-10-19 02:37 UTC
rendered paste body
import 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()