본문 바로가기

공부/python

(python) tkinter을 통한 GUI 프로그래밍7 - tkinter의 이벤트 처리

이벤트 처리

tkinter 응용 프로그램은 대부분의 시간을 이벤트 루프에 소모한다.

즉, mainloop()에서 이벤트를 기다리면서 반복 루프를 실행한다.

이것을 이벤트-구동 방식이라 한다.

 

tkinter는 아래의 형식을 가진다.

 

tkinter는 각 위젯에 대하여 파이썬 함수를 붙일 수 있다.

위젯에서 이벤트 지정자와 일치하는 이벤트가 발생하면 주어진 이벤트 처리 함수가

이벤트를 설명하는 객체와 함께 호출된다.

 

이벤트 지정자

이벤트 지정자는 아래의 형식을 가진다.

  • 타입 필드는 이벤트 지정자의 가장 중요한 부분이다.
    연결하고 싶어 하는 이벤트의 종류를 지정한다.
    ex) Button, Key, Enter, Configure, ...
  • 수식어와 세부사항 필드는 이벤트에 대한 추가적인 정보를 제공한다.

아래는 자주 쓰이는 몇 가지 이벤트 지정자들이다.

  • <Button-1>
    마우스가 버튼 위젯 위에서 눌러졌을 때 발생하는 이벤트
    1, 2, 3은 각각 왼쪽 버튼, 중간 버튼, 오른쪽 버튼이다.
    <ButtonPress-1>과 같은 버튼 이벤트를 가리킨다.
    마우스의 현재 위치는 이벤트 객체의 x와 y 멤버에 저장된다.
    위치는 위젯에 상대적이다.
  • <B1-Motion>
    마우스 버튼이 눌려진 채로 움직일 때 발생하는 이벤트
    B1, B2, B3은 각각 Button-1과 같다고 생각하면 된다.
    콜백 메소드로 전달되고 이벤트 객체의 x, y에 저장된다.
  • <ButtonRelease-1>
    마우스 버튼이 때질 때 발생하는 이벤트
    1, 2, 3은 위와 같다.
    콜백 메소드로 전달되고 이벤트 객체의 x, y에 저장된다.
  • <Double-Button-1>
    마우스 버튼이 더블 클릭될 때 발생하는 이벤트
    DoubleTriple 수식어가 있다.
    만약 단일 클릭과 더블 클릭 동시에 연결했다면 양쪽 콜백 메소드가 전부 호출된다.
  • <Enter>
    마우스 포인터가 위젯으로 진입했을 때 발생하는 이벤트
  • <Leave>
    마우스 포인터가 위젯을 떠났을 때 발생하는 이벤트
  • <FocusIn>
    키보드 포커스가 현재의 위젯으로 이동했을 때 발생하는 이벤트
  • <FocusOut>
    키보드 포커스가 현재의 위젯에서 다른 위젯으로 이동했을 때 발생하는 이벤트
  • <Return>
    엔터키가 입력되는 이벤트
  • <Key>
    사용자가 어떤 키라도 누르면 발생하는 이벤트
    눌려진 키는 이벤트 객체의 char 멤버에 저장된다.
    F5와 같은 특수키라면 char 멤버는 비어있다.
  • <Shift-Up>
    사용자가 시프크 키를 누른 상태로 위쪽 화살표키를 누르면 발생하는 이벤트
    AltShift 그리고 Control과 같은 수식어가 있다.
  • <Configure>
    위젯이 크기를 변경하였을 때 발생하는 이벤트
    위젯의 위치나 플랫폼을 변경해도 발생한다.
    새로운 크기는 콜백 메소드로 전달되는 이벤트 객체의 width, height 속성에 저장된다.

아래의 몇가지 예들을 보자.

 

마우스 이벤트 처리

 

키보드 이벤트 처리

 

마우스 버튼 이벤트 처리

 

마우스 모션 이벤트 처리