1

非常に単純な perl tk スクリプトを作成して、巨大なテキスト ファイルを読み取り、それを Text ウィジェットで表示し、それを Scrollbar ウィジェットに添付しました。今私の問題は、スクリプトを実行するたびに、(テキスト ファイル全体の) 最初の文から表示されることです。スクリプトにテキスト内の自分の位置を記憶させ、スクリプトを終了して再度開始したときに同じ領域を表示するにはどうすればよいですか。つまり、テキストの 1000 行目を読んでスクリプトを終了すると、スクリプトは 1000 行目以降を表示する必要があります。もう一度実行します。(つまり、スクロール位置を覚えておいてください)

私は perl tk や perl の専門家ではありませんが、学ぶために最善を尽くしています。分かりやすく説明して返信してください

4

1 に答える 1

2

perl スクリプトを閉じると終了します。何も思い出せません、もうそこにはありません。ただし、位置をファイルに保存するスクリプトを作成し、起動時にファイルから位置を読み取ろうとすることができます。次の例を参照してください。

#!/usr/bin/perl
use warnings;
use strict;

use Tk;

my $file   = 'input.txt';
my $config = '.viewtext.conf';

my $mw = MainWindow->new(-title => 'Remember Position');
my $t = $mw->Scrolled("Text", -scrollbars => 'se')->pack;
my $b = $mw->Button(-text => 'Quit', -command => \&quit)->pack;


open my $FH, '<', $file or die $!;
$t->Contents(<$FH>);
close $FH;

if (-f $config) {
    open my $FH, '<', $config or die $!;
    my ($x0, $x1, $y0, $y1) = split / /, <$FH>;
    $t->xviewMoveto($x0);                            # Here we restore the saved position
    $t->yviewMoveto($y0);
}

MainLoop();

sub quit {
    open my $CONF, '>', $config or die $!;
    print {$CONF} join ' ', $t->xview, $t->yview;    # This is the current position
    close $CONF;
    $mw->destroy;
}

複数の異なるファイルを開く場合は、ファイルへのパスと位置を覚えておく必要があります。

于 2012-06-27T14:30:09.037 に答える