이벤트(bind) 는 tkinter 모듈에서 버튼을 누르거나 키를 누르거나 마우스를 눌렀을 때 실행 된다.
이러한 효과를 나타내도록 정의해 놓은 함수를 핸들러라고 한다.
저번 포스팅에서는 핸들링을 위해 command 를 사용했었다. 오늘은 저번에 사용했던 command 보다 더 다양한 처리를 할 수 있는 bind() 에 대해 알아보자.
1 bind()
바인드 함수는 보다 다양한 처리를 하기 위해 이벤트와 핸들러를 연결하는 기능을 한다.
위젯.bind(event,handler)
event 발생시 Event Object 가 생성된다. 그리고 그 클래스 안에는 정보들을 가지고 있어야 하며 "event" 매개변수가 꼭 작성되어야 한다.
event 매개변수에 작성될 수 있는 이벤트명은 아래 나열한 것들이 자주 사용된다.
<Button-1> 마우스 왼쪽 버튼 클릭
<Button-2> 마우스 휠 버튼 클릭
<Button-3> 마우스 오른쪽 버튼 클릭
<Double-Button-1> 마우스 왼쪽 버튼 더블클릭 , 2 - 휠 , 3 - 오른쪽
<B1 - Motion> 마우스 왼쪽 버튼 드래그 , B2 - 휠 , B3 - 오른쪽
<Return> Enter 키 눌려짐
<Key> 키 눌려짐
# 이벤트 마우스를 클릭, 드래그, 더블클릭하면 그 위치를 출력해주는 이벤트 프로그램
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
from tkinter import *
win = Tk() # 윈도우창을 생성
win.title("Event") # 윈도우 타이틀 설정
# 출력해주는 부분
def onClick(event):
print(event.x," ",event.y)
def douleft(event):
print("더블")
def moleft(event):
print("모션")
# 클릭
win.bind("<Button-1>",onClick) # 마우스 왼쪽 버튼
# 드래그
win.bind("<B1 - Motion>",moleft) # 마우스 왼쪽 드래그
# 더블클릭
win.bind("<Double-Button-1>",douleft) # 마우스 왼쪽 더블클릭
win.mainloop() # 윈도우창이 종료될 때까지 윈도우를 실행한다.
|
cs |
먼저 줄7~13에 뭔가를 클릭하거나 드래그 했을 경우 다음과 같이 작동하도록 함수(핸들러)를 정의해줬다.
줄8의 event.x 와 event.y는 이벤트가 동작 시 윈도우 창 내에서의 좌표값이다.
그리고 줄 17에서 bind를 사용하여 마우스 왼쪽 버튼을 클릭하였을 때 핸들러 onClick이 실행되도록 설정하였고,
줄20에서는 마우스 왼쪽 드래그했을 때 moleft이 실행되도록 하고, 마우스 왼쪽 더블클릭 시에는 douleft이 실행되도록 설정해주었다.
따라서 다음과 같이 나타난다.
# 이벤트 키보드를 누르면 누른 값을 출력하는 이벤트
키보드를 누르면 누른 값을 반환하는 이벤트는 event.char 과 event.keycode 를 사용할 수 있다.
- event.char : 키보드를 누른 값을 문자로 반환한다. enter, f1,ctrl, 방향키는 문자로 표현이 안된다.
- event.keycode : 아스키코드 값을 이용해서 반환한다. 따라서 대부분 keycode값을 쓴다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 모듈
from tkinter import *
# 함수
def onClick(event):
print("키보드>",event.keycode) # 입력된 값을 아스키코드로 반환
# print("키보드>",event.char) # 입력된 값을 문자로 반환
# main()
win = Tk() # 윈도우창을 생성
win.bind("<Key>",onClick) # <Key> : 키보드를 눌렀을 때 핸들러 실행
win.focus_set # 키보드가 눌리면 포커스를 수정
win.mainloop() # 윈도우창이 종료될 때까지 윈도우를 실행한다.
|
cs |
실행 후 키보드를 입력하면 입력된 값이 아스키코드로 반환되어 출력된다.
줄 6을 주석 처리 후 줄7을 실행시킬 경우 입력된 값이 그대로 문자로 반환되지만 Enter나 F1, Ctrl 등은 문자로 표현되지 않기 때문에 값도 반환되지 않는다.
그리고 줄12에 키보드가 눌렸을 경우 해당 키보드로 포커스를 수정하기 위해 꼭 작성해준다.
댓글