0

我正在嵌入一个自定义的图形,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 想不出一个可行的解决方案,有人能指出我正确的方法吗?

4

1 回答 1

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)

并让回调完成他们的工作。

于 2013-10-04T21:21:04.913 回答