(수업내용 : 이벤트 처리
- tkinter 응용 프로그램은 대부분의 시간을 이벤트 루프에서 소모한다. 즉 mainloop()에서 이벤트를 기다리면서 반
복 루프를 실행한다. 이것을 이벤트-구동방식이라고 한다.
이벤트는 다양한 소스에서 발생할 수 있다. 키보드의 키를 눌러도 이벤트가 발생되고 마우스 버튼을 눌러도 이벤
트가 발생한다. 윈도우 매니저가 화면을 다시 그리라는 이벤트를 보낼 수도 있다. tkinter는 이벤트를 처리하는 강
력한 메카니즘을 가지고 있다. 각 위젯에 대하여 개발자는
파이썬 함수를 붙일 수 있다.
만약 위젯에서 이벤트 지정자와 일치하는 이벤트가 발생하면 주어진 이벤트 처리 함수가 이벤트를 설명하는 객
체와 함께 호출된다.간단한 예제를 보자. 마우스 이벤트를 받아서 콘솔에 출력해보자.
window = Tk()
def callback(event):
print(event.x, event.y, "에서 마우스 이벤트 발생")
frame = Frame (window, width=100, height=100)
frame.bind("<Button-1>", callback)
frame.pack()
window.mainloop()) 윈도우 창이 하나 생기고 마우스를 클릭하면 콘솔에 출력된다. 이것은 <Butto
n-1>이라 불리는 이벤트에 콜백 함수 callback()을 연결하였다. 하여 윈도우에
서 마우스 버튼을 누르면 콘솔에 “44 34”에서 마우스 이벤트 발생"이 출력된다키보드 이벤트는 현재 키보드 포커스를 소유하고 있는 위젯으로 보내진다. focus_set() 메소드를 이용하여 원하는
위젯으로 포커스를 이동시킬 수 있다.
from tkinter import *
window = Tk()
def key (event):
print (repr(event.char), "가 눌렸습니다. ")
def callback(event):
frame.focus_set()
print(event.x, event.y, "에서 마우스 이벤트 발생")
frame = Frame (window, width=100, height=100)
frame.bind("<Key>", key)
frame.bind("<Button-1>", callback)
frame.pack()
window.mainloop()
좌측 프로그램을 실행하고 마우스로 실행된 윈도우 창으로 가면
포커스가 보내어지고 키를 누르면 위와 같이 출력된다.
타입" 필드는 이벤트 지정자의 가장 중요한 부분이다. "타입"은 우리가 연
결하고 싶어 하는 이벤트의 종류를 지정한다. Button, Key, Enter, Configur
e가 "타입"이 될 수 있다. "수식어"와 "세부사항"은 이벤트에 대한 추가적인
정보를 제공하는 필드이다.이벤트 기술자를 단순화시키는 많은 방법이 있
다. 예를 들면 키보드 키 이벤트를 매칭하기 위해서는 < . . >을 생략하고
단순히 원하는 키를 입력하여도 된다. 오늘도 좋은 강의 잘 들었습니다 .강사님의 명강의를 듣고 열심히 해야겠다는 생각이 많이 듭니다.^^; 앞으로도 좋은 강의 잘 부타드립니다. 감사합니다. 수고 많으셨습니다.