@@ -56,6 +56,30 @@ def listicons(icondir=ICONDIR):
5656 column = 0
5757 root .images = images
5858
59+ def wheel_event (event , widget = None ):
60+ """Handle scrollwheel event.
61+
62+ For wheel up, event.delta = 120*n on Windows, -1*n on darwin,
63+ where n can be > 1 if one scrolls fast. Flicking the wheel
64+ generates up to maybe 20 events with n up to 10 or more 1.
65+ Macs use wheel down (delta = 1*n) to scroll up, so positive
66+ delta means to scroll up on both systems.
67+
68+ X-11 sends Control-Button-4,5 events instead.
69+
70+ The widget parameter is needed so browser label bindings can pass
71+ the underlying canvas.
72+
73+ This function depends on widget.yview to not be overridden by
74+ a subclass.
75+ """
76+ up = {EventType .MouseWheel : event .delta > 0 ,
77+ EventType .ButtonPress : event .num == 4 }
78+ lines = - 5 if up [event .type ] else 5
79+ widget = event .widget if widget is None else widget
80+ widget .yview (SCROLL , lines , 'units' )
81+ return 'break'
82+
5983
6084class TreeNode :
6185
@@ -260,6 +284,9 @@ def drawtext(self):
260284 anchor = "nw" , window = self .label )
261285 self .label .bind ("<1>" , self .select_or_edit )
262286 self .label .bind ("<Double-1>" , self .flip )
287+ self .label .bind ("<MouseWheel>" , lambda e : wheel_event (e , self .canvas ))
288+ self .label .bind ("<Button-4>" , lambda e : wheel_event (e , self .canvas ))
289+ self .label .bind ("<Button-5>" , lambda e : wheel_event (e , self .canvas ))
263290 self .text_id = id
264291
265292 def select_or_edit (self , event = None ):
@@ -410,6 +437,7 @@ def GetSubList(self):
410437# A canvas widget with scroll bars and some useful bindings
411438
412439class ScrolledCanvas :
440+
413441 def __init__ (self , master , ** opts ):
414442 if 'yscrollincrement' not in opts :
415443 opts ['yscrollincrement' ] = 17
@@ -431,6 +459,9 @@ def __init__(self, master, **opts):
431459 self .canvas .bind ("<Key-Next>" , self .page_down )
432460 self .canvas .bind ("<Key-Up>" , self .unit_up )
433461 self .canvas .bind ("<Key-Down>" , self .unit_down )
462+ self .canvas .bind ("<MouseWheel>" , wheel_event )
463+ self .canvas .bind ("<Button-4>" , wheel_event )
464+ self .canvas .bind ("<Button-5>" , wheel_event )
434465 #if isinstance(master, Toplevel) or isinstance(master, Tk):
435466 self .canvas .bind ("<Alt-Key-2>" , self .zoom_height )
436467 self .canvas .focus_set ()
0 commit comments