Не удается автоматически выйти из режима панорамирования или масштабирования при активации виджета - PullRequest
2 голосов
/ 14 октября 2019

Я добавил виджет в панель инструментов matplotlib под названием «Выбор точек», который позволяет мне выбрать группу точек в окне моей фигуры и записать их в файл. Это отлично работает. Однако, если мне раньше приходилось увеличивать масштаб или перемещаться по области интереса, прежде чем нажимать кнопку виджета на панели инструментов, режимы масштабирования или панорамирования остаются активными, и я не могу выбрать свои точки с помощью кнопки виджета, пока я не нажму кнопку увеличения /Поверните кнопки на панели инструментов снова, чтобы отключить эти режимы. Есть ли способ программно выйти из режима масштабирования или панорамирования при нажатии кнопки моего виджета? Это небольшая боль, но приятная особенность, которую я хотел бы иметь.

Я попытался просмотреть все методы plt.gcf (). Canvas и не могу найти, где можно выбрать / отменить выбор режимов панели инструментов из моего кода.

--ЧАСТЬ КОДА, КОТОРЫЕ СВЯЗЫВАЕТСЯ КНОПКУ ИНСТРУМЕНТОВ WIDGET ВЫЗЫВАЕТСЯ «ВЫБРАТЬ ТОЧКИ» К КЛАССУ getPoints ---

# Get figure handles
figNum = plt.gcf()
ax = plt.gca()
pts = ax.collections[-1]

# Route 'Select Points' button to matplotlib figure window
fig1.canvas.manager.toolmanager.add_tool('Select Points', getPoints, figNum = figNum, ax = ax, pts = pts, outPath = outPath, origTitle = origTitle)
fig1.canvas.manager.toolbar.add_tool('Select Points', 'navigation', 3)

--- getPoints CLASS ---

class getPoints(ToolToggleBase):

default_toggled = False

def __init__(self, *args, figNum, ax, pts, outPath, origTitle, **kwargs):

    # Initialize base variables
    self.figNum = figNum
    self.ax = ax
    self.pts = pts
    self.outPath = outPath
    self.origTitle = origTitle

    # Call super-initialized variables
    super().__init__(*args, **kwargs)


def enable(self, *args, **kwargs):

    # Get inputs for getPlotPts function
    figNum = self.figNum
    ax = self.ax
    pts = self.pts
    outPath = self.outPath 
    origTitle = self.origTitle
    onState = True

    # Call getPlotPts function
    getPlotPts(self, figNum, ax, pts, outPath, origTitle, onState)


def disable(self, *args, **kwargs):

    # Get inputs for getPlotPts function
    figNum = self.figNum
    ax = self.ax
    pts = self.pts
    outPath = self.outPath 
    origTitle = self.origTitle
    onState = False

    # Call getPlotPts function
    getPlotPts(self, figNum, ax, pts, outPath, origTitle, onState)
...