Python 除非设置了轴,否则Matplotlib艺术家不可拾取?

Python 除非设置了轴,否则Matplotlib艺术家不可拾取?,python,events,text,matplotlib,Python,Events,Text,Matplotlib,我在我的FigureCanvas子类中放置了一些代码,以便允许用鼠标拖动文本对象。以下是相关课程: class MyCanvas(FigureCanvasQTAgg): def __init__(self): super(JBAFigureCanvas, self).__init__(self.figure) self.figure = Figure() self.axes = self.figure.add_subplot(111)

我在我的
FigureCanvas
子类中放置了一些代码,以便允许用鼠标拖动
文本
对象。以下是相关课程:

class MyCanvas(FigureCanvasQTAgg):

    def __init__(self):
        super(JBAFigureCanvas, self).__init__(self.figure)
        self.figure = Figure()
        self.axes = self.figure.add_subplot(111)

        self.draggedArtist = None

        FigureCanvas.setSizePolicy(self, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

        self.setContentsMargins(0,0,0,0)
        self.figure.patch.set_alpha(0.0)

        self.mpl_connect("pick_event", self.pck_event)
        self.mpl_connect("motion_notify_event", self.motion_event)
        self.mpl_connect("button_release_event", self.release_event)

    def pck_event(self, event):
        """ Store which text object was picked and were the pick event occurs."""
        if isinstance(event.artist, text.Text):
            self.draggedArtist = event.artist

            self.pick_pos = (event.mouseevent.x, event.mouseevent.y)


    def on_release_event(self, event):
        """ Update text position and redraw"""

        if self.draggedArtist is not None:
            bbox = self.draggedArtist.get_window_extent()
            old_pos = bbox.xmin, bbox.ymin

            canvasLoc = (old_pos[0] + event.x - self.pick_pos[0],
                   old_pos[1] + event.y - self.pick_pos[1])
            new_pos=self.draggedArtist.get_transform().inverted().transform_point(canvasLoc)
            self.draggedArtist.set_position(new_pos)
            self.draggedArtist = None
            self.draw()
如果我再做一些文字,像这样:

axes.text(0.5, 0.5, 'testet', picker = True)
代码运行良好

但是,如果我这样做一些文本:

figure.text(0.5, 0.5, 'test', picker = True)
结果文本对象不可拾取。为了使其可拾取,我需要执行以下操作:

figure.text(0.5, 0.5, 'test', picker = True, axes = ax)
(其中,
ax
是轴实例)。
我很难理解为什么没有设置
轴的对象无法拾取?(我认为发生在画布级别的事件(即独立于轴/图)

包括调用
mpl\u connect的代码片段
更新以包含完整的类定义鼠标回调的处理方式正是回调堆栈的工作方式。iirc,画布计算出了哪些轴(如果有的话)鼠标事件已进入,并将事件传递到“顶部”轴。我们正在处理这项任务(非常长)列表中的任务,如果您愿意提供帮助,我们将不胜感激。