matplotlib 이벤트 처리 기초 (이벤트 귀속, 이벤트 속성)

사용자 인터페이스의 상호작용에 대해 말하자면 이벤트가 빠질 수 없다. 앞의 일련의 글에서 소개한 마우스 커서, 좌표, 팝업 알림 상자 등 실현된 밑바닥은 모두 이벤트 처리이다. 단지 matplotlib나 다른 패키지는 응용하기 편리하도록 봉인되었다.
matplotlib의 이벤트 처리 모델은 GTK를 바탕으로 matplotlib는 wxpython, tkinter, qt,gtk 등 흔히 볼 수 있는 GUI 백엔드와의 상호작용을 지원합니다.

이벤트 바인딩


matplotlib의 이벤트 연결에는 세 가지 요소가 있습니다.
  • canvas 대상
  • 이벤트 이름
  • 리셋 함수
  • matplotlib의 이벤트 귀속은 canvas 대상에서 mpl_ 호출됨connect 방법 구현, mpl_connect 방법은 두 가지 매개 변수가 있습니다. 이벤트 이름, 리셋 함수입니다.canvas 대상입니다.mpl_connect(이벤트 이름, 리셋 함수)
    mpl_connect 방법은 이벤트 관리자라고도 하는데 이것은 Figure Canvas Base 클래스의 방법이다.FigureCanvasBase 클래스는 matplotlib에 속합니다.backend_베이스 모듈은 그림과 백엔드의 밑바닥을 분리하는 역할을 하기 때문에 그림을 그릴 때 각 백엔드 간의 차이를 고려하지 않아도 된다.
    canvas의 원뜻 화포,figure의 원뜻 이미지는 이렇게 이해할 수 있다.figure는 모든 보이는 그림 요소의 집합이고,canvas는figure의 용기이며, canvas의 이벤트의 응답, 처리는 모두 canvas를 바탕으로 한다.
    다음은 하나의 사례를 통해 이벤트 귀속의 응용을 간단하게 설명한다.
    
    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    ax.plot([1,1])
    
    def onclick(event):
      print('%s click: button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %
         ('double' if event.dblclick else 'single', event.button,
          event.x, event.y, event.xdata, event.ydata))
    
    cid = fig.canvas.mpl_connect('button_press_event', onclick)
    
    plt.show()
    
    
    실행 후 이미지 인터페이스에서 마우스를 클릭하면 콘솔에 다음과 같은 출력이 나타납니다.
    single click: button=1, x=123, y=80, xdata=0.222531, ydata=0.960511
    이 사례에서fig는figure 대상입니다.fig의canvas 속성은 현재 이미지가 있는 canvas 대상을 되돌려주고 mpl_connect 방법,'button_press_이벤트는 마우스 왼쪽 단추로 이벤트를 누르고, onclick은 리셋 함수입니다.

    이벤트


    matplotlib에서 사용하는 이벤트 클래스는 모두 matplotlib에서 계승됩니다.backend_bases.Event, 주요 이벤트는 다음과 같습니다.
    이벤트 이름
    종류
    묘사
    ‘button_press_event'
    MouseEvent
    마우스 버튼이 눌리다
    ‘button_release_event'
    MouseEvent
    마우스 버튼이 해제됨
    ‘draw_event'
    DrawEvent
    캔버스 드로잉
    ‘key_press_event'
    KeyEvent
    키보드 버튼이 눌리다
    ‘key_release_event'
    KeyEvent
    키보드 버튼 해제
    ‘motion_notify_event'
    MouseEvent
    마우스 이동
    ‘pick_event'
    PickEvent
    캔버스에서 객체가 선택됨
    ‘resize_event'
    ResizeEvent
    도형 캔버스 크기 변경
    ‘scroll_event'
    MouseEvent
    마우스 롤러가 굴러가다
    ‘figure_enter_event'
    LocationEvent
    새 그래픽으로 마우스 이동
    ‘figure_leave_event'
    LocationEvent
    마우스로 도면 분리
    ‘axes_enter_event'
    LocationEvent
    새 축 도메인으로 마우스 이동
    ‘axes_leave_event'
    LocationEvent
    마우스 비활성화 축 영역

    이벤트 속성


    matplotlib에서 사용하는 이벤트 클래스는 모두 matplotlib에서 계승되기 때문입니다.backend_bases.Event, 따라서 모든 이벤트는 다음과 같은 세 가지 공통 속성을 가지고 있습니다.
    name: 이벤트 이름입니다.
    canvas: 이벤트를 생성하는 canvas 대상입니다.
    guiEvent: matplotlib 이벤트를 트리거하는 GUI 이벤트입니다. 기본값은 None입니다.
    모든 이벤트는 matplotlib에 정의됩니다.backend_베이스 모듈에서 자주 사용하는 마우스 이벤트 Mouse Event, 키보드 이벤트 Key Event는 모두 Location Event 이벤트에서 계승됩니다.LocationEvent 이벤트에는 5개의 속성이 있습니다.
  • x:x위치, 캔버스 왼쪽 끝에 있는 화소수
  • y:y 위치, 캔버스 밑부분의 픽셀 수
  • inaxes: 좌표계에 있는지 여부는 마우스가 있는 하위 그림의 실례입니다. 그렇지 않으면 None입니다
  • xdata: 마우스의 x 좌표
  • ydata: 마우스의 y 좌표
  • 키보드 이벤트 Key Event는 Location Event 이벤트의 5개 속성을 계승하는 것 외에 1개의 키 속성이 있습니다. 누르는 키를 표시합니다. 값 범위는 None, 모든 문자,'shift', win 또는 control입니다.
    마우스 이벤트 Mouse Event Location Event 이벤트에서 상속되는 5개 속성 외에도 다음 속성이 있습니다.
  • 키: 마우스 이벤트가 트리거될 때 누르는 키를 나타냅니다. 값 범위는 키보드 이벤트 KeyEvent의 키 속성과 같습니다
  • button: 누르는 마우스 단추를 표시합니다. 값 범위는 None, 1, 2, 3, up, down(up, down은 이벤트를 스크롤하는 데 사용됩니다)입니다
  • dblclick: 더블 클릭 여부, 부울 값..
  • 마우스 이벤트 사례


    마우스로 선을 클릭하고 마우스로 인접한 두 점을 직선으로 연결하며 시작점은 0,0이다.
    
    from matplotlib import pyplot as plt
    
    class LineBuilder:
      def __init__(self, line):
        self.line = line
        self.xs = list(line.get_xdata())
        self.ys = list(line.get_ydata())
        self.cid = line.figure.canvas.mpl_connect('button_press_event', self)
    
      def __call__(self, event):
        print('click', event)
        if event.inaxes!=self.line.axes: return
        self.xs.append(event.xdata)
        self.ys.append(event.ydata)
        self.line.set_data(self.xs, self.ys)
        self.line.figure.canvas.draw()
    
    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.set_title('click to build line segments')
    line, = ax.plot([0], [0]) # empty line
    linebuilder = LineBuilder(line)
    
    plt.show()
    
    이 matplotlib 이벤트 처리 기초(이벤트 귀속, 이벤트 속성)에 관한 글은 여기에 소개되었습니다. 더 많은 matplotlib 이벤트 처리 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

    좋은 웹페이지 즐겨찾기