2017-03-21 8 views
0

재미 추가 : 고정 폭의 사각형 패치를 사용하여 on_release 이벤트를 등록한 후에 값을 전달하려고합니다.사각형 패치의 반환 값 사용

희망하는 테스트 기능 print_me에 전달할 값을 얻을 수 없다는 점을 제외하고는 모든 것이 원하는대로 작동합니다 (완전히 무언가를하지 않는 한).

또한, on_release이 발생한 후에 y 꼭지점에서 텍스트를 통해 값을 설정하려고 시도하지만 다시 운이 없습니다.

이상적으로, 나는 2 개의 드래그 할 수있는 수평선을 갖고 싶습니다만, 이것이 효과가있을 것이라고 생각합니다.

내 테스트 코드는 다음과 같습니다 당신이 그것을 주석 클래스가있는 방법 get_path이 없습니다

  • 을 사용하려는 경우

    # from http://stackoverflow.com/questions/12052379/matplotlib-draw-a-selection-area-in-the-shape-of-a-rectangle-with-the-mouse 
    import matplotlib.pyplot as plt 
    from matplotlib.patches import Rectangle 
    
    class Annotate(object): 
        def __init__(self): 
         self.ax = plt.gca() 
         self.rect = Rectangle((0,0), 1000, 1, alpha=.5, ec="gray", fc="w", zorder=1) 
         print(self.rect) 
         self.x0 = None 
         self.y0 = None 
         self.x1 = None 
         self.y1 = None 
         self.ax.add_patch(self.rect) 
         self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press) 
         self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release) 
    
        def on_press(self, event): 
         print ('press') 
         self.x0 = event.xdata 
         self.y0 = event.ydata 
    
        def on_release(self, event): 
         print ('release') 
         #self.x1 = event.xdata 
         self.y1 = event.ydata 
         print(self.y0) 
         print(self.y1) 
         self.rect.set_width(50000) 
         self.rect.set_height(self.y1 - self.y0) 
         self.rect.set_xy((-10, self.y0)) 
         self.text.set_text(str(self.y0)) 
         self.text.set_position((self.get_path())) 
         self.ax.figure.canvas.draw() 
         print_me(str(self.y1)) 
    
    a = Annotate() 
    plt.show() 
    
    def print_me(v): 
        print('Yo!') 
        print(v) 
    
  • 답변

    2
    1. 당신은, 다른 무언가로 대체 self.text를 정의 할 필요가있다.
    2. 내부에서 사용하려면 클래스 위에 print_me 함수를 정의해야합니다.

    전체 작업 코드 :

    import matplotlib.pyplot as plt 
    from matplotlib.patches import Rectangle 
    
    def print_me(v): 
        print('Yo!') 
        print(v) 
    
    class Annotate(object): 
        def __init__(self): 
         self.ax = plt.gca() 
         self.rect = Rectangle((0,0), 1000, 1, alpha=.5, ec="gray", fc="w", zorder=1) 
         self.text = self.ax.text(1,1,"") 
    
         print(self.rect) 
         self.x0 = None 
         self.y0 = None 
         self.x1 = None 
         self.y1 = None 
         self.ax.add_patch(self.rect) 
         self.ax.figure.canvas.mpl_connect('button_press_event', self.on_press) 
         self.ax.figure.canvas.mpl_connect('button_release_event', self.on_release) 
    
        def on_press(self, event): 
         print ('press') 
         self.x0 = event.xdata 
         self.y0 = event.ydata 
    
        def on_release(self, event): 
         print ('release') 
         #self.x1 = event.xdata 
         self.y1 = event.ydata 
         print(self.y0) 
         print(self.y1) 
         self.rect.set_width(50000) 
         self.rect.set_height(self.y1 - self.y0) 
         self.rect.set_xy((-10, self.y0)) 
         self.text.set_text(str(self.y0)) 
         self.text.set_position((0, self.y0)) 
         self.ax.figure.canvas.draw() 
         print_me(str(self.y1)) 
    
    a = Annotate() 
    plt.show() 
    
    +0

    하! 나는 그것이 명백한 무엇인가 알고 있었다. 언제나처럼, 고마워! –