Более или менее преобразовав множество старых сценариев 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 не имеет эквивалента для reqwidth, reqheight, screenwidth илиheightheight, которые можно получить с помощью cget ().
Имеет ли значение тот факт, что я сейчас использую макет сетки в Tkx, а не макет пакета в Tk?
Кстати, я запускаю ActivePerl 5.10 в Windows Vista, если это имеет какое-то значение.