58 lines
1.5 KiB
Python
58 lines
1.5 KiB
Python
"""
|
|
========================
|
|
Widget testing utilities
|
|
========================
|
|
Functions that are useful for testing widgets.
|
|
See also matplotlib.tests.test_widgets
|
|
"""
|
|
import matplotlib.pyplot as plt
|
|
from unittest import mock
|
|
|
|
|
|
def get_ax():
|
|
"""Creates plot and returns its axes"""
|
|
fig, ax = plt.subplots(1, 1)
|
|
ax.plot([0, 200], [0, 200])
|
|
ax.set_aspect(1.0)
|
|
ax.figure.canvas.draw()
|
|
return ax
|
|
|
|
|
|
def do_event(tool, etype, button=1, xdata=0, ydata=0, key=None, step=1):
|
|
"""
|
|
Trigger an event
|
|
|
|
Parameters
|
|
----------
|
|
tool : matplotlib.widgets.RectangleSelector
|
|
etype
|
|
the event to trigger
|
|
xdata : int
|
|
x coord of mouse in data coords
|
|
ydata : int
|
|
y coord of mouse in data coords
|
|
button : int or str
|
|
button pressed None, 1, 2, 3, 'up', 'down' (up and down are used
|
|
for scroll events)
|
|
key
|
|
the key depressed when the mouse event triggered (see
|
|
:class:`KeyEvent`)
|
|
step : int
|
|
number of scroll steps (positive for 'up', negative for 'down')
|
|
"""
|
|
event = mock.Mock()
|
|
event.button = button
|
|
ax = tool.ax
|
|
event.x, event.y = ax.transData.transform([(xdata, ydata),
|
|
(xdata, ydata)])[0]
|
|
event.xdata, event.ydata = xdata, ydata
|
|
event.inaxes = ax
|
|
event.canvas = ax.figure.canvas
|
|
event.key = key
|
|
event.step = step
|
|
event.guiEvent = None
|
|
event.name = 'Custom'
|
|
|
|
func = getattr(tool, etype)
|
|
func(event)
|