티스토리 뷰

9.3 이벤트 처리하기(Processing Events)

- Tkinter 위젯을 이벤트가 일어날 때 호출되는 함수바인딩시킬 수 있다.

- 이벤트 기반 프로그래밍의 좋은 예로 버튼(button) 위젯이 있다.

- 사용자가 버튼을 클릭하면 당신의 프로그램은 이벤트를 수행하게 된다.

- 이러한 이벤트는 우리가 직접 처리 함수를 정의해 만들 수 있고, 버튼 위젯을 이 함수에 바인딩 할 수 있다.

 

* 버튼 이벤트 예제(ProcessButtonEvent.py)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from tkinter import *
 
def processOK():
    print("OK button is clicked")
 
def processCancel():
    print("Cancel button is clicked")
 
window = Tk() # 윈도우 생성
btOK = Button(window, text = "OK", fg = "red", command = processOK)
btCancel = Button(window, text = "Cancel", bg = "yellow", command = processCancel)
 
btOK.pack() #OK 버튼을 윈도우 창에 배치
btCancel.pack() # Cancel 버튼을 윈도우 창에 배치
 
window.mainloop()# 이벤트 루프 생성
cs

 

- line 3, line 6에서 보면 알듯이, 이 프로그램 안에 processOK() processCancel이라는 함수를 정의하였다. 

- 이 두 개의 함수가 버튼이 생성되었을 때 버튼을 바운드(bound)하는 기능을 수행한다.

- 이러한 함수들을 콜백 함수(callback functions), 또는 핸들러(handlers)라고 부른다.

 

* OK 버튼을 processOK 함수에 바인딩 하는 명령어 형식

btOK = Button(window, text = "OK", fg = "red", command = processOK)

 

- 위 명령어가 OK 버튼을 눌렸을 때 processOK() 함수를 호출하며 동시에 OK버튼을 바인딩한다.

- fg버튼의 글색(foreground color)을 결정하고, bg버튼의 배경색(background color)를 결정한다. 사용하지 않았을 경우, 기본적으로 글색은 검정색, 배경색은 회색이다.

 

- 아래의 코드처럼 위 프로그램의 함수들을 한 클래스 안에 넣어 코드를 작성할 수도 있다.

* 클래스를 이용한 이벤트 처리 예제(ProcessButtonEventAlternativeCode.py)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from tkinter import *
class ProcessButtonEvent:
    def __init__(self):
        window = Tk() #윈도우 생성
        btOK = Button(window, text = "OK", fg = "red", command = self.processOK)
        btCancel = Button(window, text = "Cancel", bg = "yellow", command = self.processCancel)
 
        btOK.pack() #OK 버튼을 윈도우 창에 배치
        btCancel.pack() # Cancel 버튼을 윈도우 창에 배치
        window.mainloop()# 이벤트 루프 생성
 
    def processOK(self):
        print("OK button is clicked")
 
    def processCancel(self):
        print("Cancel button is clicked")
 
ProcessButtonEvent() #_ _init_ _ 메소드를 호출하는 오브젝트 생성  
cs

 

- 이 프로그램에는 __init__ 메소드에서 GUI를 생성하는 클래스가 정의되어 있다.

- processOK와 processCancel은 클래스의 인스턴스 메소드이기 때문에 self.processOK(line 5)self.processCancel(line 6)호출한다.

- 클래스를 이용해 GUI프로그래밍을 하는 것에는 두 가지 이점이 있다. 하나는 나중에 클래스를 재사용 할 수 있고, 또 다른 하나는 함수가 메소드로 정의되어 있어 인스턴트 데이터 필드에 접근이 용이해진다.

 

참고 문헌 : Introduction to Programming Using Python / Y.DANIEL LIANG



본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.


교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다. 

 

 

댓글