2013-10-04 3 views
0

사용자 정의 NavigationToolbar2WxAgg으로 그림을 임베드하여 툴바의 상태를 쉽게 제어 할 수 있습니다. 확대/축소 및 팬 버튼을 토글 할 수 있기를 원하지만, 올바르게 작동 시키려면 약간의 어려움을 겪고 있습니다. 도구 모음에 대한 나의 코드는 그냥 현재 활성화되어있는 모드를 해제하는 DeactivateAll() 메소드를 호출 할 수있는 아이디어프로그래밍 방식으로 matplotlib NavigationToolbar에서 버튼 상태 토글

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() 

입니다. 불행히도, 이것은 제대로 작동하지 않습니다. 모드는 사용할 수 없지만 버튼 자체는 토글 상태로 유지됩니다. 버튼을 다시 클릭하면 모드가 활성화되지만 버튼이 불안정 해집니다.

내 google-fu가 올바른 해결책을 제시 할 수있는 해결책이 있습니까?

답변

1

프로그래밍 방식으로 단추를 눌러이 작업을 수행합니다. 난 당신이 할 수 의심

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() 

: 당신이 zoom의 코드를 보면

그래서 그냥 비슷한 라인을 포함, 라인 I 버튼 Off 전환을 가정

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

있다 이보다 더 간단합니다 :

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

콜백을 통해 작업을 수행 할 수 있습니다.

+0

감사합니다. 이제 완벽하게 작동합니다. – bheklilr

+0

@bheklilr 편집을 참조하십시오. – tacaswell