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

| コメント(0)

ちょっとした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がある模様・・・ソース

コメントする