wxPython

wxPythonとXRCとAUIの関係

ドッカブルウインドウってwxでできるんだろうか? と調べていて、wxAUIほにゃららというやつを使えばできることを知りました。早速wxPythonでやってみる。test1.py #!/usr/bin/python # -*- coding: UTF-8 -*- import wx import wx.aui class MyFrame(wx.Fra…

ダイアログをつけてみた

今日からはwx版がGtk版を追い越します。開くダイアログと保存ダイアログをつけてみました。ダイアログをつけると完成したっぽく見えてしまうし実際使えてしまうのであまり早い段階でつけたくなかったんですが、やはりいろんなファイルを作ってみてテストする…

ノードの削除とかファイル名の整理とかゴニョゴニョ

* テストしている最中にないと不便なので、ノードの削除機能を追加しました。 * ときどきAOISOME←→AOISORA間でソースの移動をやる関係で、ファイル名やファイル内にaoisora,aoisomeという文字列を入れるのをやめ、aoisoに統一しました。 * メニューを徐々に…

親を子にドロップしたらダメですよw

さて、次は何をやろうか・・・。と思っていたところに重大なバグ発見。 * 自分の子供にドラッグするとノードが消える。そうですね。仕様からして親を子供にドロップするのは違反ですね。例のごとく定石があるのかどうか知らないまま自前で処理を書いてみます…

追いついた!?

さて、これでGtk版に追いついたな?ちょっとバグ直したり、py2exe用のスクリプトを追加したりして現在Rev.42。これを0.0.5としてリリースします。Windows版バイナリもwx版で。

GtkのデフォルトTreeView風

TreeCtrlのデザインをGtkのデフォルトと同じように選択ノードを行ごとハイライトするようにしてみました。あとwx.TR_TWIST_BUTTONSというのもやってみました。style = wx.TR_HIDE_ROOT + wx.TR_TWIST_BUTTONS + wx.TR_NO_LINES + wx.TR_FULL_ROW_HIGHLIGHT +…

続・ドロップ先の情報

こんな感じにしてみました。 def __dropPointStatus(self, flag): if flag & wx.TREE_HITTEST_ONITEMBUTTON == wx.TREE_HITTEST_ONITEMBUTTON: return 0 elif flag & wx.TREE_HITTEST_ONITEMICON == wx.TREE_HITTEST_ONITEMICON: return 2 elif flag & wx.TR…

ドロップ先の情報

HitTest()の返す値はドキュメントにありました。http://wxwindowsjp.sourceforge.jp/docs/html/wx/wx399.htm#wxtreectrlhittest 与えられた点の下に、何か項目があれば、ツリー項目の id と特別な flags 情報を返す。 Calculates which (if any) item is und…

Tree内でのドラッグアンドドロップ

まずはTreeStore内に汎用的なノードの移動メソッドを作ってみました。 def moveNodeToChild(self, src_item, dest_item): print "moveNodeToChild" node = self.get_value(src_item,c.COL_OBJECT) new_item = self.append(dest_item) self.set_value(new_ite…

TreeCtrlについて

覚えているうちにメモ。ちょっと前にWindows版のXRCedを開いてみて気づいたのですが、Windows版XRCedにはTreeListCtrlというウィジェットがありました。なぜLinux版XRCedに無いのかは不明ですが、これはGtkTreeViewと同じくColumnを持っているTreeCtrlのよう…

ノードのドラッグアンドドロップ

wxのドキュメントを読んでみたところ、EVT_TREE_BEGIN_DRAGとEVT_TREE_END_DRAGというのを使えばできそうです。 self.Bind(wx.EVT_TREE_BEGIN_DRAG, self.onTreeBeginDrag) self.Bind(wx.EVT_TREE_END_DRAG, self.onTreeEndDrag) これの中身と、実際の移動用…

ファイル保存のバグ

昨日のバージョンでは既知の問題として、保存すると一階層深くなる問題がありました。 この原因はだいたい予測できていたのですぐに対応できました。原因はこれです。 #rootのiterを返す def get_iter_root(self): return self.treeCtrl.GetRootItem() これ…

ノードの追加

wx版にノードの追加機能を実装しました。正味は10行ほどなんですが、Gtk版とwx版をできるだけ対称型にしたいのと、それぞれのモジュールができるだけ疎結合になるようにということであちこち書き換えました。一時はTreeView(TreeCtrl)のメソッドにも互換性を…

AOISORAにwxWidgets版

AOISOMEのソースをマージしました。これからは 起動スクリプトを統合しオプション指定でwxWidgetsでもGtkでも起動できるようにする。 python aoisora.py -gtk見たいな感じで。 Gtk版でしか実装されていない機能を実装し追いつく。 こんな感じで。今日中にで…

もう一回整理

昨日ディレクトリを分けたらpy2exe用のsetup.pyの書き方がわからなくなってしまったので、ルートに戻しました。その関係でちょっとゴニョゴニョしたものをRev.32でコミットしました。これからwx版をマージします。

本文・タイトル編集と保存

ノードを選択した際に本文がエディタに表示される仕組みと、本文やタイトルを編集した情報がノードに保管される仕組みはできました。アウトラインプロセッサとしては、これができないとおなはしにならないわけですが。保存に関しては一応できるんですが、今…

Windowsでも動かしてみる

まだPyGtk版の半分くらいしかできてませんが、早めにwxPython版のWindowsでの動作確認をしてみます。wxPythonのインストールは簡単です。最初はwxWidgetsを入れてからwxPythonを入れるという手順を踏まなければならないと思い込んでいたのですが、Pythonが入…

TreeStoreをwxにも実装してみた

というわけで作ってみました。実際に使っているメソッドだけの実装なんで手抜きもいいとこですが、こんな感じです(部分)。 class AoisoWxTreeStore(): def __init__(self, treeCtrl): self.treeCtrl = treeCtrl def set_value(self, iter, column, value): p…

Pythonソースコードのパッケージ化

AOISOMEで書いてきたwxPython版のソースをAOISORAにマージすることにします。その前に既存のGtk版AOISORAのソースを整理しました。ファイル名やクラス名でGtk版とわかるようにしたのに加え、ディレクトリ分けをおこないました。フォルダを分けた際にimport文…

Windows上でAttachUnknownControlで配置したウィジェットのSizeがおかしい問題

バグなのか仕様なのかわかりませんが、Windowsの場合はこのような記述が必要なようです。 panel = xrc.XRCCTRL(self, "ID_TREE_PANEL") self.treeCtrl = AoisoWxTreeCtrl(panel) app.res.AttachUnknownControl("ID_TREE_CTRL", self.treeCtrl, panel) panel.…

閃いた

ふと、AOISORAのlogic.pyでgtkをimportしてないことに気づいた。実際にはその中で使っているiterはGtkTreeIterだしmodelはGtkTreeStoreなんだけど、型に甘いpythonにとってはそんなの関係ない。どこかでCreateしたりしてるわけじゃないので。ということは、…

AOISOMEコミットしました

TreeCtrlをカスタムウィジェット化 ダミーのTree表示(アイコン付き) 各種イベントハンドラを追加 以上の内容をコミット(Rev.24)。

wxTreeCtrlについて

ノードの追加方法とかデータやテキストとの関連性とかその辺のドキュメントを読んでいたんですが、印象としてはちょっと設計が古く、GtkやSwingよりはMFCとかVCLに近いと感じました。wxTreeCtrlにノード(Item)を追加する際に、テキストと画像とデータを引数…

XRCedでカスタムウィジェット

Gtkでやったときの経験上、wx.TreeCtrlは派生クラスを作った方がいいでしょう。 import wx class AoisoWxTreeCtrl(wx.TreeCtrl): def __init__(self, parent): wx.TreeCtrl.__init__(self, parent) return XRCed上では?マークのカスタムウィジェット(wx用語…

XRCedにしよう

wxGladeを使っていたらすぐに問題にぶつかった。wxGladeでは、ボタンなどの画像の指定がファイル名でしかできない(多分)。Gladeのようにstock画像を呼び出せない。最終的にはすべての画像アイコンを自作する予定なのでそれはそれでもいいのかもしれないが…

wxGladeをPythonで使う方法

Gladeの場合はPythonのスクリプトから*.gladeファイルを直接読み込んで使うが、wxGladeの場合はwxGladeからPythonファイルをジェネレートしてそれを使う。こっちの方が全部Pythonで読めて便利かも。しかし、wxGladeでGUIいじる度にジェネレートするとすればP…

sizerメモ

画面リサイズに追随するかどうかの決め手になるパラメータはProportionとwxEXPAND。Sizerの方向に関してはProportionが0だと固定、1以上だとリサイズに追随。通常の2分割の場合は片方が0、もう一方が1になる。3分割以上を使う場合は、広げたいペインだけ1に…

wxPythonも使ってみるか

カテゴリをちょっと変更しました。さて、PyGtkでの開発のめどはたったんですが、py2exeの豆腐問題とか、GtkのダイアログはWindowsユーザには馴染めないとか、いろんな課題が残されています。元々Linuxで使うためのソフトとして開発をしているわけですが、配…

続・XRCedで生成されたソースについて

なんかジェネレートされたPythonファイルはいらないような気がしてきた。Gladeと同じようにXMLを読み込むところからコーディングしても別に手間じゃないし、自分で書いたソースの方が読みやすい。 シンプルなFrameならxrcファイルとAppクラスだけでいける。 …

XRCedで生成されたソースについて

XRCedでGUIを作ったら、xrcファイルとpythonファイルが作られるわけですが、このpythonファイルをどうするかが問題です。直接編集すると次回ジェネレートするときに困ります。しかし良く見てみると大事なことはだいたいxrcファイルに書いてあるので、GUIを作…