2

在工作中处理一些 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);
}
4

0 回答 0