John M. Dlugosz has asked for the wisdom of the Perl Monks concerning the following question:

It's a constant annoyance that the text widget doesn't respond (in the same manner as clicking on the scrollbar arrows) when I move the scroll wheel. Not only is it not processing the WM_MOUSEWHEEL event, but it somehow prevents the default behavior or turning them into scroll events, too.

Is there an easy way to use the mouse wheel myself within the program? That is, code a callback for that and do the desired scrolling.

—John

Replies are listed 'Best First'.
Re: Tk scrolling and mouse wheel
by bikeNomad (Priest) on Jul 05, 2001 at 03:14 UTC
    From a DejaGoo search (by Slaven Rezic):

    Tk has already mouse wheel support, however, there is no binding in perl/Tk. If you want to make Text or Listbox widgets mouse-wheel-aware, you can use the method below (borrowed from the Tcl/Tk library), e.g. $text->BindMouseWheel. Note that I changed the scrolling delta from the original 4 or 5 lines to 3 (which seems to match the behaviour on my NT machine). # not yet tested on Unix sub Tk::Widget::BindMouseWheel { my($w) = @_; # The MouseWheel will typically only fire on Windows. However, # someone could use the "event generate" command to produce one # on other platforms. $w->bind('<MouseWheel>', [ sub { $_[0]->yview('scroll',-($_[1]/120)*3,'units') }, + Tk::Ev("D")]); if ($Tk::platform eq 'unix') { # Support for mousewheels on Linux/Unix commonly comes through + mapping # the wheel to the extended buttons. If you have a mousewheel +, find # Linux configuration info at: # http://www.inria.fr/koala/colas/mouse-wheel-scroll/ $w->bind('<4>', sub { $_[0]->yview('scroll', -3, 'units') unless $Tk::strictMotif; }); $w->bind('<5>', sub { $_[0]->yview('scroll', 3, 'units') unless $Tk::strictMotif; }); } }