Tkinter 설치 | 파이썬 GUI 프로그래밍 1

Tkinter 설치

Tkinter 는 파이썬 기본 패키지로 GUI 를 개발할 수 있는 Toolkit Interface 입니다.

파이썬 프로그래밍을 시작하면 콘솔환경 CLI 부터 배우는데요. Tkinter 를 사용하면 근사한 GUI(그래픽 유저 인터페이스)를 쉽게 시작할 수 있습니다.

tkinter 설치는 파이썬 패키지와 함께 설치됩니다. 아직 파이썬을 설치하지 않았다면 아래의 링크를 참고합니다.

tkinter 설치

tkinter 윈도우창 만들기

곧바로 만들어 보겠습니다!

import tkinter
 
tkinter.Tk().mainloop()

놀랍게도 단 두줄의 코드로 만들 수 있습니다.

tkinter 모듈을 import 명령어로 가져와서 인스턴스만 생성하면 됩니다.

mainloop 메소드는 이벤트를 감지하고 있습니다.

다음은 좀더 컨트롤을 해보겠습니다. 추가할 설정은 윈도우 타이틀, 창크기, 크기변경 사항입니다.

루트 window 를 조작함으로써 이 모든 것을 다 처리할 수 있습니다.

# import
import tkinter
 
# instance
window = tkinter.Tk()
 
# title
window.title("First Window")
 
# geomerty
window.geometry('400x300')
 
# preventing GUI from resizing
window.resizable(False, False)
 
# start GUI
window.mainloop()

tkinter.Tk()는 인스턴스를 반환합니다. GUI의 인스턴스를 반환한다는 것은 root window(뿌리 윈도우)라는 의미입니다. title이나 geometry 함수는 자기설명적입니다. 타이틀과 창의 사이즈를 말하죠. resizable 함수를 False 로 하면 창의 크기를 조절할 수 없습니다.

마지막으로 mainloop는 무한루프를 돌면서 이벤트를 듣는 모드로 들어갑니다.

레이블 만들기

위에서 본 것처럼 파이썬 tkinter 에서 윈도우창을 생성하는 것은 그리 어렵지 않습니다. GUI는 여러분이 개발하는 프로그램을 표현하기 위한 틀 같은 것입니다. 매번 똑같은 틀을 만드는 거죠.

그 다음은 윈도우안에 들어가는 구성요소를 알아보겠습니다.

이 구성요소(Component)는 종류가 많고 차이가 있습니다. tkinter 의 구성요소는 다른 GUI 시스템에 비해 종류가 많은 편은 아니지만 기본이 되는 것들은 다 갖추고 있습니다. 우선 레이블을 만들어 보죠.

레이블은 그냥 텍스트입니다. 버튼하고 차이점이 있다면 버튼은 클릭했을 때 이벤트를 발생시킬 수 있고 레이블은 클릭해도 반응하지 않습니다.
(물론 그렇게 만들수는 있는데 그러면 버튼이 됩니다)

텍스트를 화면에 표시한다는 점에서 레이블과 버튼은 아무 차이가 없지만 행동(action)에서 다르다는 점을 이해하면 충분합니다.

다음의 코드는 tkinter의 ttk 모듈을 사용하여 레이블을 만듭니다. ttk는 기존보다 향상된 방식을 사용하는데 레이아웃을 바로 사용할 수 있는 형태입니다.(ttk – theme tk 테마 tk)

# import
import tkinter
from tkinter import ttk
 
# instance
window = tkinter.Tk()
 
# title
window.title("First Window")
 
# geomerty
window.geometry('300x200')
 
# preventing GUI from resizing
window.resizable(False, False)
 
# Label
ttk.Label(window, text="Hello tkinter!").grid(column=0, row=0)
 
# start GUI
window.mainloop()

이제 윈도우 안에 텍스트를 표시할 수 있습니다. 상당한 진전입니다.

GUI 프로그래밍이 어려워지는 이유중에 하나가 레이아웃을 잡기가 생각보다 쉽지 않습니다. 요즘 반응형 웹사이트를 설계할 때 보면 레이아웃 관리를 잘해야 하는데 레이아웃을 배치하다보면 비슷한 일이 일어납니다.

윈도우창을 가급정 고정시켜야 하는 이유도 거기에 있습니다. 사용자의 모니터 사이즈가 하나가 아니기 때문에 레이아웃에 고민을 해야하는 부분입니다.

ttk.Label(window, text=”Hello tkinter!”).grid(column=0, row=0) 코드를 보면 출력할 텍스트를 주고 root window에 전달합니다.

grid 는 레이아웃 배치임을 알 수 있겠죠? 열 0, 행 0 은 첫번째입니다.
Label 구성요소가 하나밖에 없으면 자동으로 지정되는 위치기도 합니다.

레이아웃에는 여러가지 방법이 있습니다. 현대의 윈도우 GUI 툴킷은 레이아웃이 상당히 중요하죠. 모바일에도 자동으로 맞춰주는 레이아웃을 반응형이라고 하는데요.

사람들이 컴퓨터 앞에서보다 모바일에서 많은 일을 하다보니 스마트폰에서 보이는 디자인이 중요합니다. tkinter 는 모바일에는 사용할 수 없지만 그런 포인트를 염두해 두면 나중에 모바일 앱을 할 때도 아이디어가 될 수 있습니다.

버튼 만들기

레이블을 만들어 봤으니 연속해서 버튼도 만들어 보겠습니다. 버튼과 레이블의 차이는 클릭했을 때의 action 행동이라고 이야기 했습니다.

버튼을 action 과 연결시키는 것은 쉽습니다. 버튼이 클릭했을 때 어떤 함수를 실행시킬 것인지만 정하면 됩니다. 아래의 버튼은 클릭하면 레이블과 버튼의 색상과 텍스트가 바뀝니다.

# import
import tkinter
from tkinter import ttk
 
# instance
window = tkinter.Tk()
 
# title
window.title("First Window")
 
# geomerty
window.geometry('300x200')
 
# preventing GUI from resizing
window.resizable(False, False)
 
def buttonClicked():
    label.configure(foreground='blue')
    label.configure(text='CLICKED')
    button.configure(text='GOOD!')
     
# Button
button = ttk.Button(window, text="CLICK", command=buttonClicked)
button.grid(column=1, row=0)
 
# Label
label = ttk.Label(window, text="Hello tkinter!")
label.grid(column=0, row=0)
 
# start GUI
window.mainloop()

ttk 모듈로 버튼을 만드는 방법도 레이블과 같습니다. 다만 이벤트 처리를 위해서 함수의 이름을 command 매개변수에 전달합니다. 이 때 함수 () 괄호를 넣으면 함수가 실행되는 것입니다. ()괄호를 빼고 전달해야 이벤트 발생에 사용할 수 있습니다.

buttonClicked 함수안에는 레이블과 버튼의 내용을 변경하는 코드가 있습니다. 클릭하면 행동이 일어난다는 것을 보여주기 위한 예제이고 실제로는 이보다 의미있는 코드를 작성하겠죠. GUI Toolkit은 말그대로 도구이니까 하나의 틀이고 더 중요한 것은 그 안에 들어가는 내용이란 것을 생각하면 좋은 프로그램을 만들 수 있습니다.

요약

이번 포스팅은 파이썬 tkinter 설치부터 시작해봤습니다.

GUI 윈도우창을 만들고 그 안에 레이블, 버튼을 만들어서 이벤트와 연결시키고 실제 작동해봤습니다.

다음 포스팅에서 더 다양한 구성요소(Component, Widget)의 사용방법을 알아보겠습니다.

외부참고문서

tkinter 설치 — Tcl/Tk 파이썬 인터페이스 — Python 3.9.1 문서

Leave a Comment