如何发射(射击)axes_leave_event

时间:2011-12-02 19:55:15

标签: python pyqt matplotlib

这是我的第一个stackoverflow问题!我有一个显示mpl图帆布的PyQT gui。我已经将主轴周围的边距设置为0,因此绘图将完全填充图形画布和包含它的小部件。问题是,当我这样做时,当我离开图形画布时,我不再获得axes_leave_event。例如,当我单击mpl_toolbar中的平移按钮时,我的光标变为交叉箭头,但是当我离开小部件时,我希望它返回到正常状态,并在我重新输入小部件时返回​​到交叉箭头。如果我不尽量减少轴周围的边距,那么它就像我想的那样工作。我也可以连接'axes_leave_event',但我不想连接它我想发出它并且无法弄清楚如何做到这一点。

非常感谢。

我的应用程序相当大,所以我只会展示我认为最相关的代码。

    def create_main_frame(self):
        self.dpi = 100
        self.fig = Figure((5.0, 4.0), dpi=self.dpi)
        self.fig.subplots_adjust(left = 0, right=1, top=1, bottom=0)
        self.map_canvas = MyDiagram(self.fig)

        self.add_axis()

        self.mpl_toolbar = NavigationToolbar(self.map_canvas, None)
        self.layout().addWidget(self.map_canvas)  


class MyDiagram(FigureCanvas):
    def __init__(self, fig):
        FigureCanvas.__init__(self, fig)
        self.mpl_connect('axes_leave_event', self.testing)
    def resizeEvent(self, event):
        if not event.size().height() == 0:
            FigureCanvas.resizeEvent(self, event)

    def testing(self, event):
        pass

    def leaveEvent(self, event):
        FigureCanvas.leaveEvent(self, event)
        #If I could somehow get the 'axes_leave_event' to fire right here I would be set.

1 个答案:

答案 0 :(得分:0)

这有点基于猜测,因为我无法使用matplotlib对其进行测试,但这些内容可能会有效:

class MyDiagram(FigureCanvas):
    def __init__(self, fig):
        FigureCanvas.__init__(self, fig)
        self._cursor = None

    def enterEvent(self, event):
        if (self._cursor is not None and
            QApplication.overrideCursor() is None):
            QApplication.setOverrideCursor(self._cursor)
        FigureCanvas.enterEvent(self, event)

    def leaveEvent(self, event):
        self._cursor = QCursor(QApplication.overrideCursor())
        QApplication.restoreOverrideCursor()
        FigureCanvas.leaveEvent(self, event)