как испустить (огонь) axes_leave_event - PullRequest
2 голосов
/ 02 декабря 2011

Это мой первый вопрос о stackoverflow! У меня есть графический интерфейс PyQT, который отображает рисунок холста mpl. Я установил поля вокруг моих главных осей на 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 голосов
/ 06 декабря 2011

Это в некоторой степени основано на догадках, так как я не могу проверить это с 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...