以编程方式在matplotlib NavigationToolbar上切换按钮状态

时间:2013-10-04 20:39:46

标签: python matplotlib wxpython wxwidgets

我正在嵌入一个带有自定义NavigationToolbar2WxAgg的图形,这样我就可以(希望)轻松控制工具栏的状态。我希望能够切换缩放和平移按钮,但我很难让它正常工作。我的工具栏代码是

class CustomNavToolbar(NavigationToolbar2WxAgg):
    def __init__(self, *args, **kwargs):
        NavigationToolbar2WxAgg.__init__(self, *args, **kwargs)

        self.DeleteToolByPos(7)  # Deletes the adjust subplots button

    @property
    def IsActive(self):
        return self._active is not None

    def DeactivateAll(self):
        if self._active == 'PAN':
            self.pan('off')
        elif self._active == 'ZOOM':
            self.zoom()

我认为我可以调用DeactivateAll()方法来关闭当前活动的任何模式。不幸的是,这不太正常。该模式已禁用,但按钮本身保持切换状态。当我再次单击该按钮时,模式已启用,但按钮未被遮挡。

我的google-fu无法提出可行的解决方案,有人能指出我正确的方法吗?

1 个答案:

答案 0 :(得分:1)

我会通过以编程方式按下按钮来完成此操作。

如果您查看zoom的代码,则会有

self.ToggleTool(self.wx_ids['Pan'], False)

我假设关闭按钮,所以只需包含一个类似的行:

def DeactivateAll(self):
    if self._active == 'PAN':
        self.pan('off')
        self.ToggleTool(self.wx_ids['Pan'], False)
    elif self._active == 'ZOOM':
        self.ToggleTool(self.wx_ids['Zoom'], False)
        self.zoom()

我怀疑你可以让这更简单:

 def DeactivateAll(self):
    self.ToggleTool(self.wx_ids['Pan'], False)
    self.ToggleTool(self.wx_ids['Zoom'], False)

让回叫做他们的工作。

相关问题