dystrophy has asked for the wisdom of the Perl Monks concerning the following question:

In Perl/Tk:
Is it possible to grab the current position of a scrollbar (or scrolled) and restore that position after refreshing or changing the content (EG scrolled ROText box)?

I've searched around a bit, but I haven't satisfied my curiousity.

TIA - dystrophy

Replies are listed 'Best First'.
Re: scroll position
by dystrophy (Monk) on Jan 21, 2001 at 00:54 UTC
    tye was nice enough to guide me to the solution - I had been looking under Tk::Scrollbar and Scrolled instead of Tk::Text.

    Use yview() to retreive the current position, then use yviewMoveTo($fract) to set the position.

    Now I can attempt to mess with the Perl/Tk Chatterbox Client...(no more cutting and pasting to view ancient chat)

    -dystrophy
      You can use yview(moveto=>$fract) instead of yviewMoveTo($fract).

      Here is a convenience fix for the Perl/Tk Chatterbox Client.
      Change sub updChatterbox to:
      sub updChatterbox { my ($mytopchar, $myposition) = $Chatfield->yview(); # retreive sc +roll pos &Status('Checking for new chat messages...'); foreach (&getFromServer('chat')) { &printChat("$_"); } &Status($status_idle); if ($myposition == 1) { $Chatfield->yview(moveto=>$myposition); } else { $Chatfield->yview(moveto=>$mytopchar); # restore scroll pos } }

      This allows you to scroll back and read aged chat without having the client jump to the bottom. No more cutting and pasting!!

      Update: If I had bothered to actually pay attention while browsing through the Tk CB code, I would have seen the part about $Chatfield->see('end');
      Here is a nicer fix:
      if ($myposition == 1) { $Chatfield->yview(moveto=>$myposition); } else { $Chatfield->yview(moveto=>$mytopchar); # restore scroll pos }

      -dystrophy