除非设置轴,Matplotlib艺术家才能挑选?

时间:2014-07-26 14:20:47

标签: python events text matplotlib

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

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是轴实例)。 我很难理解为什么没有设置Axes的对象无法被选中? (我认为事件发生在画布层面(即独立于轴/图)..

0 个答案:

没有答案