ここでは、シンプルなテキストエディタのためのドキュメントクラスを設定します。
import W import os import macfs class MyDocumentClass(W.Window): _untitledcounter = 1 # Initialisation def __init__(self, path = ""): # get the title and data if not path: self.title = "Untitled " + `MyDocumentClass._untitledcounter` MyDocumentClass._untitledcounter = MyDocumentClass._untitledcounter + 1 text = "" elif os.path.exists(path): path = macfs.ResolveAliasFile(path)[0].as_pathname() dir, name = os.path.split(path) self.title = name f = open(path, "rb") text = f.read() f.close() # Might read from resource fork here self.path = path # Set up the window and widgets W.Window.__init__(self, (600, 400), self.title, minsize = (330, 120), tabbable = 0) self.setupwidgets(text) self.editgroup.editor.changed = 0 def setupwidgets(self, text): self.editgroup = W.Group((0, 0, 0, 0)) editor = W.TextEditor((0, 0, -15,-15), text) self.editgroup._barx = W.Scrollbar((0, -15, -14, 16), editor.hscroll, max = 32767) self.editgroup._bary = W.Scrollbar((-15, 0, 16, -14), editor.vscroll, max = 32767) self.editgroup.editor = editor # Finalisation def close(self): # If things have changed, should we save before closing? if self.editgroup.editor.changed: import EasyDialogs import Qd Qd.InitCursor() # XXX should be done by dialog save = EasyDialogs.AskYesNoCancel('Save window %s before closing?' % self.title, 1) if save > 0: if self.domenu_save(): return 1 elif save < 0: return 1 W.Window.close(self) # Document Menu Items def domenu_close(self, *args): return self.close() def domenu_save(self, *args): if not self.path: # Will call us recursively return self.domenu_save_as() data = self.editgroup.editor.get() f = open(self.path, 'wb') f.write(data) f.close() import macostools macostools.touched(self.path) self.editgroup.editor.changed = 0 def can_save(self, menuitem): return self.editgroup.editor.changed or self.editgroup.editor.selchanged def domenu_save_as(self, *args): fss, ok = macfs.StandardPutFile('Save as:', self.title) if not ok: return 1 self.path = fss.as_pathname() dir, name = os.path.split(self.path) self.title = name self.settitle(self.title) self.domenu_save()
何も大事なことはありません。一般的なメニューアイテムしか使わないし、メニューアイテムをPython IDEのメニューのように使うので、これをインポートしてドキュメントのインスタンスを作ることができます。