Skip to content

[MNT]: Deprecate onselect/onmove_callback of selectors #21929

Closed
@ericpre

Description

@ericpre

Summary

If I remember correctly, at some point, @anntzer suggested to deprecate onselect argument for selectors. Now, that I understand better what he meant at the time, I think it makes a lot of sense, because the behaviour of the "builtin" selector callback is contentious and inconsistent between selectors.

Proposed fix

The alternative would be something along the lines of:

import matplotlib.pyplot as plt
from matplotlib.widgets import RectangleSelector
import functools

_, ax = plt.subplots()
ax.plot([1, 2, 3])


def dummy_callback(*args):
    pass


def onselect_callback(event, selector):
    print('## onselect callback ##')
    if not selector.ignore(event):
        print('   ', selector.extents)
        return
    print('   event ignored')


def onmove_callback(event, selector):
    print('## onmove callback ##')
    if not selector.ignore(event) and selector._eventpress:
        print('   ', selector.extents)
        return
    print('   event ignored')


tool = RectangleSelector(ax, dummy_callback, interactive=True,
                         drag_from_anywhere=True,)
tool.extents = (1.2, 2.0, 1.0, 1.6)

# alternative to onselect
rectangle_onselect_callback = functools.partial(onselect_callback, selector=tool)
tool.connect_event('button_release_event', rectangle_onselect_callback)

# alternative to onmove_callback (SpanSelector only)
rectangle_onmove_callback = functools.partial(onmove_callback, selector=tool)
tool.connect_event('motion_notify_event', rectangle_onmove_callback)

In my opinion, the reasons to deprecate are:

Proposed fix:

  • Deprecate the onselect/onmove arguments of the selectors, as per example above
  • improve the API to ignore events (the example above uses a private API to reproduce the onmove_callback of the SpanSelector)
  • update example, improve documentation on the use of callback registry.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions