More magic
さらなる魔法(?)
当然のことながらエディタは文書を保存したり開いたり出来なければ使い物になりません。
ここでコモンダイアログを導入します。
コモンダイアログは wxPython の下にあるプラットフォームから提供されるので
アプリケーションはネイティブ同様にみえることでしょう。
以下は MainWindow クラスの OnOpen メソッドの実装です。
# このメソッドはたった三つのステップで動きます。 def OnOpen(self,e): """ Open a file""" self.dirname = '' # 始めに、適切なコンストラクタを呼び出して、ダイアログを作成します。 dlg = wx.FileDialog(self, "Choose a file", self.dirname, "", "*.*", wx.OPEN) # 次に、 ダイアログの ShowModal メソッドを呼び出します。 # これはダイアログの実際の処理を全て行い、ユーザー選んだボタンに対応する # 値を返します。 if dlg.ShowModal() == wx.ID_OK: # 必要であれば選択されたファイルの名前と self.filename=dlg.GetFilename() # ディレクトリを取り出し、 self.dirname=dlg.GetDirectory() # エディタ内にそのファイルの内容を取り込みます。 f=open(os.path.join(self.dirname,self.filename),'r') self.control.SetValue(f.read()) f.close() # そして最後にダイアログを削除します。 dlg.Destroy() # ※ 4 ステップのような気がします…
問題がなければメニューに対応するアイテムを追加し、これを OnOpen メソッドと
接続することができるはずです。完全なソースは付録をご覧ください。
可能な拡張
もちろんきちんとしたエディタにはまだまだ程遠いものです。
しかし他の機能追加にここまでやってきたよりも難しいものはないでしょう。
wxPython に付属のデモから色々と思いつくでしょう。
- ドラッグアンドドロップ
- MDI
- タブビュー/複数ファイル対応
- 検索/置換ダイアログ
- 印刷ダイアログ
- Python によるマクロコマンドライン
- その他色々…
※ここまで出来たらあとは色々と思いつくままにやってみな、ってことらしいです。