アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記のソースでコントロールが上手く左に寄せる事が出来ない。
use Encode;
use utf8;
use open IO => ":encoding(utf8)";
binmode STDOUT,':utf8';

use Tk;
$top = MainWindow->new();
$top->optionAdd( '*font' => 'MSゴシック 18' );
$f1 = $top->Frame()->pack();
$f2 = $top->Frame()->pack();
$f3 = $top->Frame()->pack();
$f1->Label(-text => "comment")->pack(-side => "left");
$f1->Entry(-textvariable => \$comment)->pack();
$f1->Label(-text => "funct_name")->pack(-side => "left");
$f1->Entry(-textvariable => \$funct_name)->pack();
$f2->Label(-text => "batch_name")->pack(-side => "left");
$f2->Entry(-textvariable => \$batch_name)->pack();
$f3->Button(-text => "OK",-command => \&onButton)->pack(-side => "left");
$f3->Button(-text => "Cancel")->pack();
MainLoop();

sub onButton{
open(OUT,">command.txt")||die "file open err command.txt\n";
print OUT "$comment,$funct_name,$batch_name\n";
close OUT;
exec "01.bat";
exit();
}

下記の様に成る。

上手く左に寄せるには、何処をどの様に修正をすれば
良いのでしょうか。指摘をお願いします。

宜しく、お願いします。

「perl/tkでコントロールの配置が上手」の質問画像

A 回答 (2件)

綺麗にそろえるなら、Gridを使うのはどうでしょうか?

    • good
    • 0
この回答へのお礼

済みません。

私には分かりません。
修正箇所を指摘願います。

お礼日時:2018/01/15 21:34

gridは、一つのフレームの上に、各ウィジェットを(Excelのセルのような)縦横格子状に配置するものです。


packの代りに使います。
配置する格子のrowとcolumn等を指定します。

例えば、 comment と表示されるLabelは、左上、つまり-row=>0,->column=0 に配置したいのですから

$f1->Label(-text => "comment")->grid(-row=>0,->column=0);

になります。
他にもいろんな設定があります。



ところで、この画面の設計図は作りましたか?
よほどの熟練でも無い限り、事前の設計無しに思った通りの配置などは無理だと思います。

Perl/Tkで画面を作るのは、丁度、ウェブページをHTML/CSSで直書きするような感覚です。
(Visual Studioのフォームデザイナのようなツールはあるらしいのですが、私は使ったことは無いので紹介できません。)


 元のプログラムでやろうとしていることは
Label Entry
 と横に並んだ行を1セットにして3セット縦に並べ、その下に
OKボタン Calcelボタン
 と横に並んだ行を1セットにして縦に並べる、ということではないでしょうか?
そのために
・1行につき、1つのFrameを用意、packで縦に配置
・1つのフレームに対応するLabel をpackで左側に配置、 Entryを残りに配置
・以上を3フレーム繰り返す
・ボタン配置用のフレームを用意して、packで縦に配置
・ボタン配置用のフレームにボタンを横方向にpackで配置
とやろうとしているのでしょう。
ところが、 Label + Entry とボタン用の4つのフレームを用意しなければいけないのに、$f1,$f2,$f3 と3つしか用意せず、
$1に Label二つとEntry二つを配置してしまっているのが、「期待通りに表示されない」理由です。
ただし、「プログラムに書いた通りに正しく配置」はされています。
    • good
    • 0
この回答へのお礼

有難う御座います。

大変に丁寧な説明、助かりました。
疑問は解決しました。

お礼日時:2018/01/16 06:47

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