Perltk - 记住Text小部件中的位置

时间:2012-06-27 12:53:57

标签: perl perltk

我刚刚编写了一个非常简单的perl tk脚本来读取一个巨大的文本文件并使用Text小部件显示它并将其附加到Scrollbar小部件。现在我的问题是,每次运行脚本时,它都会从第一个句子(整个文本文件)开始显示。我如何让脚本记住我在文本中的位置并在我退出时显示相同的区域并再次启动脚本 ie 如果我读取文本的第1000行并退出脚本,脚本应该当我再次运行它时,显示第1000行。 (换句话说,记住滚动位置)

我不是perl tk和perl的专业人士,而是尽我所能去学习它。请回复清楚地解释

1 个答案:

答案 0 :(得分: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;
}

如果要打开多个不同的文件,则必须记住文件的路径以及位置。