« YAPC::Asia 2007 Tokyoのチケットをロッピーで買う | メイン | Spreadsheet::WriteExcelのバグが直ってる »

WxPerl, XRCだとNot a HASH Referenceされる件

ちょっとしたGUIフロントエンドを拵えるのに便利なWxWidgets。
Perl/Tkなどに比べて利用者の目に優しいところがよいです。

ダイアログなどを構成するのに、テキストやチェックボックスをメソッドを呼びだして一つ一つ作っていく方法と、XRCというビルダーで構成したXMLを読ませて、構成済みのダイアログを読みだす方法と、二つあります。

今までXRC経由で読みだすと、インスタンスはスカラーリファレンスになるので・・・

sub new {
    my ($class, $parent) = @_;
    my $self = $xrc->LoadDialog($parent, "config_dialog") || die;
    $self->{msg} = 'ahi-';

とかすると、"Not a HASH Reference"と怒られます。
それもそのはず、Dumper $selfすると・・・

$VAR1 = bless( do{\(my $o = 96575776)}, 'Wx::Dialog' );

スカラーリファレンスですね。

そこで、Class::Accessor::Fastなどを使ってみるのですが、これもハッシュリファレンスを前提にしていて、同じエラーがでます。

Perl Best Practicesで思いだして、InsideOutオブジェクトなら行けると、Class::InsideOutをずーっと使ってました。

しかし、見つけてしまいました、XRCからHash Referenceインスタンスを生成する方法を。

use base qw(Wx::Panel);
sub new {
    my ($class, $parent) = @_;
    my $self  = $class->SUPER::new;
    #undocumented function
    $xrc->LoadOnDialog($self, $parent, 'config_dialog') || die; 
    $self->{orz} = '_| ̄|○';

・・・
LoadOnDialog, LoadOnPanel, LoadOnFrameがある模様・・・ソース

トラックバック

このエントリーのトラックバックURL:
http://bokut.in/mt4/mt-tb.cgi/31

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)