- ベストアンサー
Perl/Tkで変数名を使って一気にウィジェットを配置する方法
- Perl/Tkでforやforeachを使って、ウィンドウ上にウィジェットを一括配置することは可能です。
- しかし、作成したウィジェットに名前をつけて参照する方法はありません。
- より詳しい方法を知りたい場合は、以下の手順を参考にしてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
$window->Entry でウィジェットオブジェクトが返ってきそうなので, 無理すれば for my $i (0..9) { (${ent$i} = $window->Entry)->pack; } とか書けるのかもしれんけど, 普通は配列を使うような気がする.
その他の回答 (1)
- Tacosan
- ベストアンサー率23% (3656/15482)
や, それは「変数 $ent? に入れているわけじゃない」ことを理解してるんだよね? まあ, 結果的にできてればいいかもしれんけど....
お礼
下のように修正です。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?並び/ はなんの意味も成さなかったのかなと思っています。 糞コードしか書けませんので、しばらく何か突っ込みがある方はよろしくお願いします。
補足
こんにちは。 これは前回のお礼を投稿した後、別のコードを書いていて、なんかおかしいなあと思ったところ、どうも$ent?ではなく$ent[?]に入っているようでした…(- -;) なので、Tacosanさんの>>1にお礼したときに僕が書いたコードがおかしいという認識は今はありますが、先に全部動作する状態にして後でマシにしていこうと思っています。 Perlは始めて半月強なため混乱気味でよくわからないので、もう少しうなって、まとまったらお礼と一緒にコードを掲載しようかと思います。
お礼
配列で実行できました!拙いコードですがご笑覧下さい。 #!/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資料や書籍が他言語より少ないように思えるので、他にもご意見のある方がいればしばしお待ちしております。