パネルを閉じるとき

□ Matplotlibを使う場合に直面している問題点

2次元グラフを作成するアプリで実装したように、図を別ウィンドウで描画した後、ウィンドウを閉じると再度の描画ができなくなる。

現在このような問題に直面しているのだが、そういえば前も同じことがあったのを思い出した。
GUIの画面のボタンを押して、別パネルを開くとする。このパネルを閉じるときにウィンドウの右上のバツ印をクリックして閉じた場合には、再度そのパネルを開こうとしても開けなくなる、という問題だった。
再度開こうとするときのエラーメッセージは、

File "C:\Python25\Lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 14318,
in __getattr__
raise PyDeadObjectError(self.attrStr % self._name)
wx._core.PyDeadObjectError: The C++ part of the OptionPanel object has been
deleted, attribute access no longer allowed.

であった。このときは、開こうとするパネルに”閉じる”ボタンを付けて、そのボタンが押された場合には Show(False) でパネルを閉じる。このようにパネルを閉じることを明示して実行させれば再度パネルを開くことは問題ない。しかし、ウィンドウの右上のバツ印を押したときのイベントの定義はできない(?)ので、バツ印を押してウィンドウを閉じたときには、再度ウィンドウを開くことはやっぱりできない。

つまり、Matplotlibで描画するときに起こる同様な問題の解決方法としては、

  • 描く絵をファイルに保存して、パネルに貼り付けてそのウィンドウを開くようにする。そのウィンドウを閉じるためのボタンをどこかにつける。
  • ウィンドウのバツ印を押して閉じても、問題が起こらないような実装方法をなんとか探す。
  • なんらかの例外処理でエラーを回避する?

が考えられる。とりあえずすぐできそうなのは、最初の方法か。
でも、ウィンドウのバツ印を押して閉じると問題が起こるようなアプリケーションは気持ちがいいものではない。