0

スクロールペインがあり、チャートを作成するために一連の長いリストボックスが表示されます。下部のスクロールバーは完全に機能しますが、右側のスクロールバーは、表示領域の外側に何もないことを示していますが、ウィンドウのサイズを変更すると、非表示になっている行が多数表示されます。フレームとリストボックスをあらゆる種類の順序でパックしようとしました(リストボックスをパックしてからデータを入力し、リストボックスをいっぱいにしてからパックするなど)。しかし、何をしても、右側のスクロールバーはそうではありません。リストボックスがペインよりも高いことを理解していないようです。

実際のプログラムはもう少し複雑ですが、ジオメトリを制限することで動作を示す簡単な例を次に示します。私の実際の場合、グラフの幅や高さはわかりませんが、ジオメトリに何かを指定しないと、ウィンドウは非常に小さくなります。

use strict;
use Tk;
require Tk::Pane;

my $mw = MainWindow->new;
my $graph_button = $mw->Button(-text => 'Make Graph',-command => sub {&make_graph} )->pack();
MainLoop;
exit;

sub make_graph {
my $summary_tl = $mw->Toplevel( -title => "My graph" );
$summary_tl->geometry("500x200");

my $summary_frame = $summary_tl->Scrolled ( "Pane",
                                            -scrollbars  => "se",
                                            -sticky      => 'nesw',
                                          )->pack(-fill=>'both',-expand=>1);

# First column holds the names 
my $name_frame = $summary_frame->Frame()->pack(-side=>'left',-fill=>'both',-expand=>1);
my $name_lb = $name_frame->Listbox (-width=>0,-relief=>'flat',-borderwidth=>0)->pack(-side=>'top',-fill=>'both',-expand=>1);
$name_lb->insert('end',"Names");

# Second column shows the overall status 
my $overall_frame = $summary_frame->Frame()->pack(-side=>'left',-fill=>'both',-expand=>1,);
my $overall_lb = $overall_frame->Listbox (-width=>0,-relief=>'flat',-borderwidth=>0)->pack(-side=>'top',-fill=>'both',-expand=>1);
$overall_lb->insert('end',"Overall Status");

# The next remaining columns are one per check of the current checklist, with the check number being the header.
my %stat_frame = ();
my %stat_lb = ();
foreach my $check_num (qw /1 2 3 4 5 6 7 8 9 10/) {
    $stat_frame{$check_num} = $summary_frame->Frame()->pack(-side=>'left',-fill=>'both',-expand=>1);
    $stat_lb{$check_num} = $stat_frame{$check_num}->Listbox(-width=>0,-relief=>'flat',-borderwidth=>0,) -> pack(-side=>'top',-fill=>'both',-expand=>1);
    $stat_lb{$check_num}->insert('end',"Check $check_num");
}

# Now go through and add each row
foreach my $name (qw /a b c d e f g h i j k l m n o p q r s t u v w x y z/) {
    $name_lb->insert('end',$name);
    $overall_lb->insert('end',"pass");
    foreach my $check_num (qw /1 2 3 4 5 6 7 8 9 10/) {
        $stat_lb{$check_num} -> insert('end',"Status");
    }
}
} # end make_graph subroutine
4

1 に答える 1

1

OK、私はこれを理解しました。問題は、垂直スクロールバーがリストボックスの高さに合わせられていることでした。デフォルトは10で、ジオメトリ設定で設定した高さの範囲内でした。真の高さを設定するすべてのリストボックスにデータを入力した後に行を追加すると、スクロールバーが機能し始めました。

于 2011-07-27T19:06:29.383 に答える