下邊資料是關(guān)于python通過Tkinter庫實(shí)現(xiàn)的一個(gè)簡單的文本編輯器的內(nèi)容。
from tkSimpleDialog import askstring
from tkFileDialog? import asksaveasfilename
from tkMessageBox import askokcancel? ? ? ? ?
class Quitter(Frame):? ? ? ? ? ? ? ? ? ? ? ?
? ? def __init__(self, parent=None):? ? ? ? ?
? ? ? ? Frame.__init__(self, parent)
? ? ? ? self.pack()
? ? ? ? widget = Button(self, text='Quit', command=self.quit)
? ? ? ? widget.pack(expand=YES, fill=BOTH, side=LEFT)
? ? def quit(self):
? ? ? ? ans = askokcancel('Verify exit', "Really quit?")
? ? ? ? if ans: Frame.quit(self)
class ScrolledText(Frame):
? ? def __init__(self, parent=None, text='', file=None):
? ? ? ? Frame.__init__(self, parent)
? ? ? ? self.pack(expand=YES, fill=BOTH)? ? ? ? ? ? ?
? ? ? ? self.makewidgets()
? ? ? ? self.settext(text, file)
? ? def makewidgets(self):
? ? ? ? sbar = Scrollbar(self)
? ? ? ? text = Text(self, relief=SUNKEN)
? ? ? ? sbar.config(command=text.yview)? ? ? ? ? ? ? ? ?
? ? ? ? text.config(yscrollcommand=sbar.set)? ? ? ? ?
? ? ? ? sbar.pack(side=RIGHT, fill=Y)? ? ? ? ? ? ? ? ?
? ? ? ? text.pack(side=LEFT, expand=YES, fill=BOTH)? ?
? ? ? ? self.text = text
? ? def settext(self, text='', file=None):
? ? ? ? if file:
? ? ? ? ? ? text = open(file, 'r').read()
? ? ? ? self.text.delete('1.0', END)? ? ? ? ? ? ? ? ?
? ? ? ? self.text.insert('1.0', text)? ? ? ? ? ? ? ? ?
? ? ? ? self.text.mark_set(INSERT, '1.0')? ? ? ? ? ? ?
? ? ? ? self.text.focus()? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? def gettext(self):? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? return self.text.get('1.0', END+'-1c')? ? ? ?
class SimpleEditor(ScrolledText):? ? ? ? ? ? ? ? ? ? ? ?
? ? def __init__(self, parent=None, file=None):
? ? ? ? frm = Frame(parent)
? ? ? ? frm.pack(fill=X)
? ? ? ? Button(frm, text='Save',? command=self.onSave).pack(side=LEFT)
? ? ? ? Button(frm, text='Cut',? command=self.onCut).pack(side=LEFT)
? ? ? ? Button(frm, text='Paste', command=self.onPaste).pack(side=LEFT)
? ? ? ? Button(frm, text='Find',? command=self.onFind).pack(side=LEFT)
? ? ? ? Quitter(frm).pack(side=LEFT)
? ? ? ? ScrolledText.__init__(self, parent, file=file)
? ? ? ? self.text.config(font=('courier', 9, 'normal'))
? ? def onSave(self):
? ? ? ? filename = asksaveasfilename()
? ? ? ? if filename:
? ? ? ? ? ? alltext = self.gettext()? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? open(filename, 'w').write(alltext)? ? ? ? ?
? ? def onCut(self):
? ? ? ? text = self.text.get(SEL_FIRST, SEL_LAST)? ? ? ?
? ? ? ? self.text.delete(SEL_FIRST, SEL_LAST)? ? ? ? ?
? ? ? ? self.clipboard_clear()? ? ? ? ? ? ?
? ? ? ? self.clipboard_append(text)
? ? def onPaste(self):
? ? ? ? try:
? ? ? ? ? ? text = self.selection_get(selection='CLIPBOARD')
? ? ? ? ? ? self.text.insert(INSERT, text)
? ? ? ? except TclError:
? ? ? ? ? ? pass?
? ? def onFind(self):
? ? ? ? target = askstring('SimpleEditor', 'Search String?')
? ? ? ? if target:
? ? ? ? ? ? where = self.text.search(target, INSERT, END)?
? ? ? ? ? ? if where:
? ? ? ? ? ? ? ? print where
? ? ? ? ? ? ? ? pastit = where + ('+%dc' % len(target))?
? ? ? ? ? ? ? #self.text.tag_remove(SEL, '1.0', END)? ?
? ? ? ? ? ? ? ? self.text.tag_add(SEL, where, pastit)? ?
? ? ? ? ? ? ? ? self.text.mark_set(INSERT, pastit)? ? ? ?
? ? ? ? ? ? ? ? self.text.see(INSERT)? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? self.text.focus()? ? ? ? ? ? ? ? ? ? ? ?
if __name__ == '__main__':
? ? try:
? ? ? ? SimpleEditor(file=sys.argv[1]).mainloop()?
? ? except IndexError:
? ? ? ? SimpleEditor().mainloop()?