電子書籍の厳選無料作品が豊富!

Perl/Tkでforやforeachを使って、ウィンドウ上にウィジェットを一括配置したいのです。

my $window = new MainWindow;
for (my $i=0; $i<10; ++$i) {$window->Entry->pack;}

みたいにして一括作成はできるのですが、作ったウィジェットを後で使うために、これらのウィジェット名に名前をつけながら配置したいです。
上記のコードの場合、後から ent1->get; のように参照できるようにしたいと思っております。
こういったことは可能でしょうか。またその方法があれば手順を示していただけると助かります。

詳しい人には馬鹿にされそうな文ですが、
$ent$i = $window->Entry->pack;では駄目でした。。。

A 回答 (2件)

$window->Entry でウィジェットオブジェクトが返ってきそうなので, 無理すれば


for my $i (0..9) { (${ent$i} = $window->Entry)->pack; }
とか書けるのかもしれんけど, 普通は配列を使うような気がする.
    • good
    • 0
この回答へのお礼

配列で実行できました!拙いコードですがご笑覧下さい。
#!/usr/bin/perl
use strict; use warnings; use Tk;
my $window = new MainWindow;
my @ents = (qw/$ent0 $ent1 $ent2 $ent3 $ent4 $ent5 $ent6 $ent7 $ent8 $ent9/);
foreach (@ents) {$_ = $window->Entry->pack;}
#次の行で属性をいじってみるテスト
foreach (@ents) {$_->configure(-width=>80);} #OK!
MainLoop;
なお、「無理すれば」手順はCan't call method "ent" without a package or object referenceで不可でした。

とりあえずプログラム自体を動かすことは配列でいけそうです。
ありがとうございます。_(_ _)_

PerlとTkは機能と比較した場合、Web資料や書籍が他言語より少ないように思えるので、他にもご意見のある方がいればしばしお待ちしております。

お礼日時:2008/12/22 03:50

や, それは「変数 $ent? に入れているわけじゃない」ことを理解してるんだよね?


まあ, 結果的にできてればいいかもしれんけど....

この回答への補足

こんにちは。
これは前回のお礼を投稿した後、別のコードを書いていて、なんかおかしいなあと思ったところ、どうも$ent?ではなく$ent[?]に入っているようでした…(- -;)
なので、Tacosanさんの>>1にお礼したときに僕が書いたコードがおかしいという認識は今はありますが、先に全部動作する状態にして後でマシにしていこうと思っています。
Perlは始めて半月強なため混乱気味でよくわからないので、もう少しうなって、まとまったらお礼と一緒にコードを掲載しようかと思います。

補足日時:2008/12/25 10:58
    • good
    • 0
この回答へのお礼

下のように修正です。Tacosanさん突っ込みありがとうございます。
********
#!/usr/bin/perl
use strict; use warnings; use Tk;
my $window = new MainWindow;
my @ents;
for (1..9) {@ents[$_] = $window->Entry->pack;}
#↓ひとまず参照できた。。。仮に[5]を変更した
$ents[5]->configure(-width=>40);
MainLoop;
********
多分、先の qw/$ent?並び/ はなんの意味も成さなかったのかなと思っています。
糞コードしか書けませんので、しばらく何か突っ込みがある方はよろしくお願いします。

お礼日時:2008/12/25 17:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!