作为一个临时解决方案,我可以将它放在只存储一个组件的包装器对象中。这使我能够绑定到
Enter
和
Leave
#!/usr/bin/perl
use strict;
use warnings;
use Tk;
my $mainWindow = new MainWindow;
my $lbHolder = $mainWindow->Pane()->pack;
my $lb = $lbHolder->Scrolled("Listbox", -scrollbars => "osoe")->pack;
$lb->insert('end', qw/red blue yellow green orange/);
$lb->insert('end', qw/red blue yellow green orange/);
$lb->insert('end', qw/red blue yellow green orange/);
$lb->insert('end', qw/red blue yellow green orange/);
$lb->insert('end', qw/red blue yellow green orange/);
my $lbCanScroll = 0;
$mainWindow->bind('<MouseWheel>' => [sub{ if($lbCanScroll) { $lb->yview('scroll', -($_[1] / 120) * 3, 'units'); } }, Ev('D')]);
$lbHolder->bind('<Leave>' => sub{$lbCanScroll = 0});
$lbHolder->bind('<Enter>' => sub{$lbCanScroll = 1});
MainLoop;