或多或少地將很多舊的Tk腳本轉換爲Tkx我被卡住了以下函數的端口,它重新定位傳入的窗口作爲屏幕中心的參數。在調用MainLoop之前,我習慣稱之爲Tk,因爲Tk明確地決定了reqwidth和reqheight的值。如何在Perl Tkx下重新定位主窗口?
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 ::更新(如有必要),但我很茫然找到任何明顯的翻譯這個老Tk的程序的窗口特定部分。對於reqwidth,reqheight,screenwidth或screenheight而言,Tkx似乎沒有可以通過cget()檢索到的內容。
難道我現在在Tkx中使用網格佈局而不是Tk中的包佈局有什麼實際意義嗎?
順便說一句我在Windows Vista上運行ActivePerl 5.10,如果這有什麼區別的話。