티스토리 뷰
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
※
본 게시물은 개인적인 용도로 작성된 게시물입니다. 이후 포트폴리오로 사용될 정리 자료이니 불펌과 무단도용은 하지 말아주시고 개인 공부 목적으로만 이용해주시기 바랍니다.
교재 영어 원서를 직접 번역하여 정리한 게시물이므로 일부 오타, 의역이 존재할 수 있습니다. 틀린 부분이 있다면 댓글로 알려주시면 감사하겠습니다.
※
'파이썬 > 파이썬 GUI' 카테고리의 다른 글
[파이썬]대출 계산기 (0) | 2017.11.06 |
---|---|
[파이썬]기하 관리자(The Geometry Managers) (0) | 2017.11.01 |
[파이썬]캔버스 (0) | 2017.10.30 |
[파이썬]위젯 클래스 (4) | 2017.09.26 |
[파이썬]Tkinter를 이용한 GUI 프로그래밍 (1) | 2017.09.10 |
- Total
- Today
- Yesterday
- css 박스
- 파이썬 객체
- 파이썬 진수 변환
- 백준 11501
- 파이썬 리스트
- css 그리드
- 파이썬 문자열
- 파이썬 함수
- 자바 에센셜 실습문제
- 파이썬 클래스
- 명품 c++ 실습
- 백준
- 파이썬 연산자
- 백준 10451
- 파이썬
- 백준 1874
- 버츄어박스
- 자바
- 파이썬 예제
- 파이썬 터틀
- 자바스크립트 자료구조
- 자료구조
- 자바스크립트 그래프
- css
- 파이썬 while
- 파이썬 선택문
- 파이썬 for
- 파이썬 단계적 개선
- 웹
- 파이썬 if문
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 | 29 | 30 |