多かれ少なかれ、多くの古い Tk スクリプトを Tkx に変換したので、パラメータとして渡されたウィンドウを画面の中央に再配置する次の関数のポートが必要です。MainLoop を呼び出す直前にこれを呼び出していましたが、その時点で Tk は明らかに reqwidth と reqheight の値を決定していました。
sub CenterWindow
{
# Args: (0) window to center
# (1) [optional] desired width
# (2) [optional] desired height
my($window, $width, $height) = @_;
$window->idletasks;
$width = $window->reqwidth unless $width;
$height = $window->reqheight unless $height;
my $x = int(($window->screenwidth / 2) - ($width / 2));
my $y = int(($window->screenheight / 2) - ($height / 2));
$window->geometry($width . "x" . $height . "+" . $x . "+" . $y);
}
idletasks は、必要に応じて Tkx::update() に変更できますが、この古い Tk ルーチンのウィンドウ固有の部分の明白な翻訳を見つけることができません。Tkx には、cget() で取得できる reqwidth、reqheight、screenwidth、または screenheight に相当するものがないようです。
Tk のパック レイアウトではなく、Tkx でグリッド レイアウトを使用しているという事実は関連性がありますか?
ところで、違いがあれば、Windows Vista で ActivePerl 5.10 を実行しています。