我想创建一个带有MListbox的Tk应用程序来显示一些数据。如果信息太多,我希望会出现一个滚动条。
我的问题是MListbox没有填满所有可用空间。右边有一个空白区域。它看起来不太好看。 有可能解决这个问题吗?或者我应该使用另一个小部件? (TableMatrix似乎很有趣,但我无法下载)。我之所以选择MLlistbox,是因为我希望能够隐藏一些列并更改每列的大小。
这是我到目前为止的代码:
my $frameDocuments = $mw->Frame(-background => '#CCCCFF');
$documentsListbox = $frameDocuments->Scrolled(
'MListbox',
-scrollbars => 'osoe',
-columns => [
[-text => 'Name'], [-text => 'Path'], [-text => 'Format'],
[-text => 'Loader Type'], [-text => 'Cache directory']
],
-resizeable => 1,
-moveable => 1,
-sortable => 1,
-selectmode => 'browse',
);
$frameDocuments->pack(-anchor => "n",-expand => "1",-fill => "both",-side => "top");
$documentsListbox->pack(-anchor => "n",-expand => "1",-fill => "both",-side => "top");
答案 0 :(得分:0)
当窗口宽度大于列宽的总和时,Tk::MListbox
似乎没有调整自己的列的大小。看起来像一个错误,也许你应该报告它?
无论如何,您可以使用columnPack
函数尝试解决它。根据{{3}}:
$ ml-> columnPack(数组)
重新打包MListbox小部件中的所有列 根据数组中的规范。数组中的每个元素都是一个 格式索引上的字符串:width。 index是列索引,宽度 以像素为单位定义列宽(可以省略)。列是 按数组指定的顺序从左到右打包。列不是 数组中指定的内容将被隐藏。
这是一个示例 1 ,其中我最大化窗口以填充整个屏幕,然后计算列宽:
#! /usr/bin/env perl
use strict;
use warnings;
use Tk;
use Tk::MListbox;
my $mw = MainWindow->new();
my $frameDocuments = $mw->Frame(-background => '#CCCCFF');
my @columns = (
[-text => 'Name'],
[-text => 'Path'],
[-text => 'Format'],
[-text => 'Loader Type'],
[-text => 'Cache directory']
);
my $numCols = scalar @columns;
my $documentsListbox = $frameDocuments->Scrolled(
'MListbox',
-scrollbars => 'osoe',
-columns => \@columns,
-resizeable => 1,
-moveable => 1,
-sortable => 1,
-selectmode => 'browse',
);
$frameDocuments->pack(
-anchor => "n",
-expand => "1",
-fill => "both",
-side => "top"
);
$documentsListbox->pack(
-anchor => "n",
-expand => "1",
-fill => "both",
-side => "top"
);
my $screenHeight = $mw->screenheight;
my $screenWidth = $mw->screenwidth;
$mw->geometry( sprintf "%dx%d+0+0", $screenWidth, $screenHeight );
my $colWidth = int( $screenWidth / $numCols );
my @ar = map { "$_:$colWidth" } 0 .. ($numCols - 1);
$documentsListbox->columnPack(@ar);
MainLoop;
结果窗口:
<强>脚注强>:
<子> 子>