Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2dc560e

Browse files
committed
added scroll event support
svn path=/trunk/matplotlib/; revision=3417
1 parent 13814db commit 2dc560e

File tree

4 files changed

+83
-2
lines changed

4 files changed

+83
-2
lines changed

CHANGELOG

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2007-06-27 Added a scroll event to the mpl event handling system and
2+
implemented it for backends GTK* -- other backend
3+
users/developers/maintainers, please add support for your
4+
backend. - JDH
5+
16
2007-06-25 Changed default to clip=False in colors.Normalize;
27
modified ColorbarBase for easier colormap display - EF
38

examples/image_slices_viewer.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import numpy
2+
from pylab import figure, show
3+
4+
5+
6+
7+
class IndexTracker:
8+
def __init__(self, ax, X):
9+
self.ax = ax
10+
ax.set_title('use scroll wheen to navigate images')
11+
12+
self.X = X
13+
rows,cols,self.slices = X.shape
14+
self.ind = self.slices/2
15+
16+
self.im = ax.imshow(self.X[:,:,self.ind])
17+
self.update()
18+
19+
def onscroll(self, event):
20+
21+
if event.button=='up':
22+
self.ind = numpy.clip(self.ind+1, 0, self.slices-1)
23+
else:
24+
self.ind = numpy.clip(self.ind-1, 0, self.slices-1)
25+
26+
27+
self.update()
28+
29+
def update(self):
30+
self.im.set_data(self.X[:,:,self.ind])
31+
ax.set_ylabel('slice %s'%self.ind)
32+
self.im.axes.figure.canvas.draw()
33+
34+
35+
fig = figure()
36+
ax = fig.add_subplot(111)
37+
38+
X = numpy.random.rand(20,20,40)
39+
40+
tracker = IndexTracker(ax, X)
41+
42+
43+
44+
fig.canvas.mpl_connect('scroll_event', tracker.onscroll)
45+
show()

lib/matplotlib/backend_bases.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -763,15 +763,16 @@ def __init__(self, name, canvas, x, y,guiEvent=None):
763763

764764
class MouseEvent(LocationEvent):
765765
"""
766-
A mouse event (button_press_event, button_release_event,
766+
A mouse event (button_press_event, button_release_event, scroll_event,
767767
motion_notify_event).
768768
769769
The following attributes are defined and shown with their default
770770
values
771771
772772
x = None # x position - pixels from left of canvas
773773
y = None # y position - pixels from bottom of canvas
774-
button = None # button pressed None, 1, 2, 3
774+
button = None # button pressed None, 1, 2, 3, 'up', 'down'
775+
(up and down are used for scroll events)
775776
key = None # the key pressed: None, chr(range(255), shift, win, or control
776777
inaxes = None # the Axes instance if mouse us over axes
777778
xdata = None # x coord of mouse in data coords
@@ -856,6 +857,7 @@ class FigureCanvasBase:
856857
'key_release_event',
857858
'button_press_event',
858859
'button_release_event',
860+
'scroll_event',
859861
'motion_notify_event',
860862
'pick_event',
861863
)
@@ -915,6 +917,21 @@ def pick_event(self, mouseevent, artist, **kwargs):
915917
event = PickEvent(s, self, mouseevent, artist, **kwargs)
916918
self.callbacks.process(s, event)
917919

920+
def scroll_event(self, x, y, button, guiEvent=None):
921+
"""
922+
Backend derived classes should call this function on any
923+
scroll wheel event. x,y are the canvas coords: 0,0 is lower,
924+
left. button and key are as defined in MouseEvent
925+
"""
926+
self._button = button
927+
s = 'scroll_event'
928+
mouseevent = MouseEvent(s, self, x, y, button, self._key, guiEvent=guiEvent)
929+
self.callbacks.process(s, mouseevent)
930+
931+
932+
if not self.widgetlock.locked():
933+
self.figure.pick(mouseevent)
934+
918935
def button_press_event(self, x, y, button, guiEvent=None):
919936
"""
920937
Backend derived classes should call this function on any mouse
@@ -1020,6 +1037,7 @@ def func(event)
10201037
'key_release_event',
10211038
'button_press_event',
10221039
'button_release_event',
1040+
'scroll_event',
10231041
'motion_notify_event',
10241042
'pick_event',
10251043

lib/matplotlib/backends/backend_gtk.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,7 @@ def __init__(self, figure):
157157
self._pixmap_height = -1
158158
self._lastCursor = None
159159

160+
self.connect('scroll_event', self.scroll_event)
160161
self.connect('button_press_event', self.button_press_event)
161162
self.connect('button_release_event', self.button_release_event)
162163
self.connect('configure_event', self.configure_event)
@@ -180,6 +181,18 @@ def __init__(self, figure):
180181
self._renderer_init()
181182

182183

184+
def scroll_event(self, widget, event):
185+
if _debug: print 'FigureCanvasGTK.%s' % fn_name()
186+
x = event.x
187+
# flipy so y=0 is bottom of canvas
188+
y = self.allocation.height - event.y
189+
if event.direction==gdk.SCROLL_UP:
190+
direction = 'up'
191+
else:
192+
direction = 'down'
193+
FigureCanvasBase.scroll_event(self, x, y, direction)
194+
return False # finish event propagation?
195+
183196
def button_press_event(self, widget, event):
184197
if _debug: print 'FigureCanvasGTK.%s' % fn_name()
185198
x = event.x

0 commit comments

Comments
 (0)