오늘은 파이썬(Python)에 GUI(Graphical User Interface) 모듈(Module) 중 tkinter를 알아보겠습니다
Tk는 유닉스 계열 컴퓨터에서 예전부터 많이 사용했던 플랫폼(Platform) 독립적인 GUI 라이브러리(Library)입니다
tkinter는 파이썬(Python) 설치 시에 기본으로 포함되며
윈도우(Window)를 생성하고 버튼(Button), 레이블(Label)과 같은
위젯(Widget, GUI를 작성하기 위해 tkinter에서 제공하는 도구)을 이용하여
사용자와 상호작용하는 프로그램을 작성할 수 있습니다
위젯(Widget) | 설명 |
Button | 버튼 주로 명령을 수행할 때 사용된다 |
Canvas | 화면에 그림을 그리기 위해 사용된다 |
Checkbutton | 2가지로 구별되는 값을 가지는 변수를 표현한다 |
Entry | 한 줄의 텍스트를 입력받는 필드이다 |
Frame | 경계선과 배경을 가지며 다른 위젯(Widget)들을 Grouping하는데 사용된다 |
Label | 텍스트나 이미지를 표시한다 |
Listbox | 선택 사항을 표시한다 |
Menu | 메뉴를 표시한다. 폴다운 메뉴나 팝업 메뉴가 가능하다 |
Menubutton | 메뉴 버튼이다. 폴다운 메뉴가 가능하다 |
Message | 텍스트를 표시한다. 레이블(Label)과 비슷하지만 자동적으로 주어진 크기로 텍스트를 축소할 수 있다 |
Radiobutton | 여러 값을 가질 수 있는 변수를 표시한다 |
Scale | 슬라이더를 끌어서 수치를 입력하는데 사용된다 |
Scrollbar | Canvas, Entry, Listbox, Text 위젯(Widget)을 위한 Scrollbar를 제공한다 |
Text | 형식을 가지는 텍스트를 표시한다 |
Toplevel | 최상위 윈도우로 표시되는 독립적인 컨테이너 위젯(Widget)이다 |
LabelFrame | 경계선과 제목을 가지는 Frame 위젯(Widget)의 변형이다 |
PanedWindow | 자식 위젯(Widget)들을 크기조절이 가능한 Panel로 관리하는 컨테이너 위젯(Widget)이다 |
Spinbox | 특정한 범위에서 값을 선택하는 Entry 위젯(Widget)의 변형이다 |
※ 참고
컨테이너 위젯(Container Widget)은 다른 위젯(Widget)들을 내부에 넣을 수 있는 위젯(Widget)을 의미합니다
#위젯(Widget) 테스트
from Tkinter import * #Mac환경 Windows라면 from tkinter import *
window = Tk()
label = Label(window, text = "Label")
label.pack() #화면에 출력
entry = Entry(window)
entry.pack()
checkbutton = Checkbutton(window, text = "Checkbutton")
checkbutton.pack()
window.mainloop() #이벤트를 처리하는 함수
위의 코드(Code)는 하나의 창에 Label, Entry, Checkbutton을 순서대로 출력합니다
그런데 입력한 순서대로 출력하는 것 말고 배치관리자(Layout Manager)를 통해 위젯(Widget)들을 배치할 수 있습니다
파이썬(Python)은 ① 압축(pack) 배치관리자 ② 격자(grid) 배치관리자 ③ 절대(place) 배치관리자를 제공합니다
배치관리자를 이용하여 위젯(Widget)들을 배치하고 버튼 클릭(Click)과 같은 이벤트(Event)처리 방법을 익히기 위해
간단하게 계산기를 만들어보겠습니다
#간단한 계산기
from Tkinter import *
window = Tk()
window.title("Basic Calculator")
display = Entry(window, width = 20, bg = "white")
display.grid(row = 0, column = 0, columnspan = 5) #columnspan은 5만큼 차지한다는 의미
button_list = [ '7', '8', '9', '/', 'C'
, '4', '5', '6', '*', ' '
, '1', '2', '3', '-', ' '
, '0', '.', '=', '+', ' ' ]
def click(e):
if e == '=':
result = eval(display.get()) #eval()함수를 통해 수식 계산
r = str(result)
display.insert(END, '=' + r)
else:
display.insert(END, e)
row_idx = 1
col_idx = 0
for button_text in button_list:
def process(t = button_text):
click(t)
Button(window, text = button_text, width = 5, command = process).grid(row = row_idx, column = col_idx++)
if col_idx > 4:
row_idx++
col_idx = 0
window.mainloop()
아주 간단한 계산기가 완성되었습니다
위의 코드를 보면 버튼을 생성하는 반복문 안에 process()함수를 하나 선언하였습니다
그 이유는 Button 객체 생성시에 event처리를 위해 command = 처리 함수를 등록하는데
이곳에 click(button_text)이렇게 넣으면 버튼 객체를 생성하면서 곧바로 이벤트가 발생하기 때문입니다
이것으로 오늘의 학습을 마치겠습니다-_-
'Python' 카테고리의 다른 글
[Python] Tk Interface(tkinter) 알아보기_2 (0) | 2019.09.05 |
---|---|
[Python] 간단한 메모장 만들기 (0) | 2019.09.05 |
[Python] 순환(Recursion)호출을 이용한 Fractal 프로그램 (0) | 2019.09.03 |
[Python] 함수(Function)를 이용한 간단한 로또(Lotto)추첨 프로그램 (0) | 2019.08.27 |
[Python] 문자열 알아보기 (0) | 2019.08.27 |