본문 바로가기
Python/tkinter

[Python tkinter] tkinter 모듈을 이용한 GUI - 이벤트 (bind) 바인딩하기 <Key> 와 <Button>, <Motion>

by dev수니 2021. 4. 7.
반응형

 

 

이벤트(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.xevent.y이벤트가 동작 시 윈도우 창 내에서의 좌표값이다.

 

그리고 줄 17에서 bind를 사용하여 마우스 왼쪽 버튼을 클릭하였을 때 핸들러 onClick이 실행되도록 설정하였고,

 

줄20에서는 마우스 왼쪽 드래그했을 때 moleft이 실행되도록 하고, 마우스 왼쪽 더블클릭 시에는 douleft이 실행되도록 설정해주었다.

 

따라서 다음과 같이 나타난다.

 

 

 


 

 

# 이벤트 키보드를 누르면 누른 값을 출력하는 이벤트

 

 

키보드를 누르면 누른 값을 반환하는 이벤트는 event.charevent.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에 키보드가 눌렸을 경우 해당 키보드로 포커스를 수정하기 위해 꼭 작성해준다.

 

 

 

 

 

 

반응형

댓글