Gladeとカスタムウィジェット
今は一旦ある程度動いているソースをバラして書き直しているところです。というのも、これまでGladeでGUIデザインをする際にカスタムウィジェットというのを使えることを知らず、デフォルトのGtkウィジェットしか使えないようだからと仕方なくそれらを張り付けて使っていたのです。そのためGtkTreeViewのイベントハンドラにごちゃごちゃ処理を書いたりしてわかりにくいソースになっているのです。まるでVBでもやってるかのような(そしてDelphiでも入門時にはやってしまいがちな)ダサダサな手法です。しかし今回カスタムウィジェットを知ったので、GtkTreeViewを継承した独自のTreeViewクラスを用意し、Glade上ではカスタムウィジェットとして配置することでよりスマートにできるという目論見で書き直しているところです。
ところがこれが上手くいきません。多分カスタムウィジェットの使い方を理解していないだけだと思いますが、カスタムウィジェットをgtk.Labelだと思い込んでいるようなエラーがでます。おそらくGlade上でカスタムウィジェットとして貼り付けられている実体がgtk.Labelということなのだと思います。一応理解しているつもりの手順としては、
- カスタムウィジェットにするクラスを記述する。(いうまでもなく)コンスタラクタをちゃんと作る。今回はTreeViewを継承している。
- 生成関数(引数はstr1,str2,int1,int2)を作り、その中で上記クラスのインスタンスを生成する。戻り値としてそのインスタンスを返す。
- Glade上にカスタムウィジェットを配置し、上記生成関数を指定。
- あとはメインウインドウのコンストラクタでself.wtree.get_widget(カスタムウィジェット名)する。
という感じなのですが、今のところ
libglade-WARNING **: could not find widget creation function
AttributeError: 'gtk.Label' object has no attribute 'append_column'
と出ます。append_columnはTreeViewのメソッドなので、やはりカスタムウィジェットがTreeViewクラスであることを認識してないのだと思います。
今日はここまで。