是否通过mpl_connect对用户提供的matplotlib画布回调进行排序?

时间:2016-12-01 06:45:00

标签: python canvas matplotlib callback event-handling

我注册了2个回调 - 1个用于点击,1个用于选择。

import matplotlib.pyplot as plt
fig = plt.figure()
fig.canvas.mpl_connect('button_release_event', onclick)
fig.canvas.mpl_connect('pick_event', onpick)
...
def onclick(event): ...
def onpick(event): ...

我想在我的点击事件中知道它是否与挑选事件一起发生,(知道点击可挑选对象会触发这两个事件)。我注意到挑选事件总是先出现,所以我在clicked_point = True # or Falseonpick中检查/设置onclick之类的变量。

到目前为止这种方法很好但看起来很粗略。我在docs找不到答案,但也许我还没找到合适的部分。

我的另一种选择是仅注册'button_release_event',并计算我的scatter图上点击坐标和数据点之间的欧几里德距离,以确定是否应该引发'pick_event'行为。如果它确实存在,我宁愿依赖于mpl_connect注册的这些函数的调用顺序。

我遇到的代码检查一个艺术家(ax.collections.contains(event)或类似的东西)中是否有一个事件。但是,由于我使用单个调用来分散整个数据点数组(plt.scatter(X, Y, ..)),因此我返回了一个PathCollection对象,我理解该对象表示订单中所有点的路径他们进来了。但是我从来没有想过要从这个集合中获得不同的艺术家,所以当我在event中检查[PathCollection]收容时,它总是返回false。不确定这样的事情是否可行,或者是否有意义,但我想我会在这里记录它,以防它相关。

0 个答案:

没有答案