TreeStoreをwxにも実装してみた
というわけで作ってみました。実際に使っているメソッドだけの実装なんで手抜きもいいとこですが、こんな感じです(部分)。
class AoisoWxTreeStore(): def __init__(self, treeCtrl): self.treeCtrl = treeCtrl def set_value(self, iter, column, value): print "set_value" if column==c.COL_TEXT: self.treeCtrl.SetItemText(iter, value) print value elif column==c.COL_OBJECT: self.treeCtrl.SetItemPyData(iter, value) print value elif column==c.COL_ICON: print "not implemented !" def get_value(self, iter, column): print "get_value" if column==c.COL_TEXT: return wx.TreeCtrl.GetItemText(iter) elif column==c.COL_OBJECT: return wx.TreeCtrl.GetItemPyData(iter) elif column==c.COL_ICON: print "not implemented !" return None ・・・・
要するにGtkTreeStoreのメソッドを片っ端からwxTreeCtrlの処理に置き換えていくだけです。このクラスを間にはさむことによって、Gtk用につくったメインロジックを一行も変えずにwxアプリでも使えました。実際動いたときは感動です。これまでのロジックのコーディング量はたいしたことないので、ソースコードの流用自体は作業上はそんなにメリットじゃないんですが(むしろ手間がかかってるし)、TreeCtrlを直接叩くのはやはり気持ち悪いので、今後このクラスによってMVCをきちんとわけてコーディングできるメリットの方が大きいでしょう。
いやぁ、型チェックをしないスクリプトの恩恵ってこんなところにもあるんですね・・・。
今までのところをコミットしました(Rev.25)。ちなみに動かすにはlogic.pyとnode.pyをAOISORAからコピーしてくる必要があります。