Я пытаюсь обеспечить поведение прокрутки в графическом интерфейсе, разработанном с использованием Perl TK.
Чего я хотел бы добиться, это когда мышь находится над виджетом, таким как Scrolled
, содержащим ListBox
пользователь должен иметь возможность прокручивать вверх и вниз с помощью колесика мыши.Мышь считается над виджетом, если она находится над самим виджетом или полос прокрутки по бокам виджета.Другими словами, если мышь находится где-нибудь над Scrolled
, а не только над ListBox
.
, я включил приведенный ниже пример, который работает, когда мышь находится над ListBox
, но не работает.если он находится за пределами ListBox
, но все еще находится на Scrolled
.
Стоит отметить, что для поддержки колеса мыши это характерно для Windows в моем примере.
Пример сценария
#!/usr/bin/perl
use strict;
use warnings;
use Tk;
my $mainWindow = new MainWindow;
my $lb = $mainWindow->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')]);
$lb->bind('<Leave>' => sub{$lbCanScroll = 0});
$lb->bind('<Enter>' => sub{$lbCanScroll = 1});
MainLoop;
Несмотря на то, что я опубликовал то, что я назову временным решением, было бы неплохо узнать, существует ли более многократно используемый способ для достижения этой цели.