在工作中处理一些 Perl/Tk 代码以着色和显示预先编写的代码文件。该程序的着色和显示都很好。我唯一的问题是,如果我将窗口大小重新调整得更小,滚动条和文本窗口就会消失,而不是动态调整大小以适应新的窗口大小。有没有办法修复我的代码,以便滚动条、文本区域等在调整大小时保持完全可见?谢谢你提供的所有帮助。
要显示的文本被解析,然后作为变量 $macro 传递。我省略了用于解析文本的子例程和用于着色的代码,因为它似乎工作正常并且不包含任何格式说明,所以我非常怀疑它是否会涉及调整大小问题。这是我的代码:
my $mw = ( MainWindow->new );
$mw->Button(
-text => "Close Window",
-command => sub {exit}
)->grid(
-row => 2,
-column => 2,
-columnspan => 4,
-sticky => "nsew",
-padx => 3,
-pady => 3
);
$mw->title("MacroView $arg");
my $fullpathbar = $mw->Label(
-textvariable => \$fullpath,
-font => "{Courier} 12 {normal}"
)->grid(
-row => 0,
-column => 0,
-columnspan => 5,
-sticky => "nsew",
-padx => 3,
-pady => 3
);
my $tb = $mw->Scrolled( "Text", -font => "{Courier} 12 {normal}" )->grid(
-row => 1,
-column => 0,
-columnspan => 6,
-sticky => "nsew",
-padx => 3,
-pady => 3
);
my $rw = $mw->Label(
-textvariable => \$rwtext,
-font => "{Courier} 12 {normal}"
)->grid(
-row => 2,
-column => 0,
-sticky => "nsew",
-padx => 3,
-pady => 3
);
my $scrollbar = $mw->Scrollbar( -orient => 'horizontal' );
$scrollbar->configure( -command => [ 'xview', $fullpathbar ] );
$scrollbar->grid(
-row => 0,
-column => 5,
-sticky => "nsew",
-padx => 3,
-pady => 3
);
$tb->insert( 'end', $macro );
$tb->configure( -state => 'disabled' );
MainLoop;
编辑:解决方案是在调用 MainLoop 之前添加以下代码行;
my $columns;
my $rows;
my $i;
($columns, $rows) = $mw->gridSize();
for ($i=0;$i<$columns;$i++){
$mw->gridColumnconfigure($i, -weight=>1);
}
for ($i=0;$i<$rows;$i++){
$mw->gridRowconfigure($i, -weight=>1);
}