Tkinter 소개

1. Tkinter 소개

Tkinter는 Tcl/Tk에 대한 파이썬 Wrapper로서 Tcl/Tk를 파이썬에 사용할 수 있도록 한 Lightweight GUI 모듈이다. Tcl은 Tool Command Language의 약자로서 일종의 프로그래밍 언어이며, Tk는 크로스 플랫폼에 사용되는 일종의 GUI 툴킷이다. Tkinter는 타 GUI 프레임워크나 툴킷에 비해 지원되는 위젯들이 부족하고 UI도 그렇게 예쁘지 않다는 단점이 있지만, Python 설치시 기본적으로 내장되어 있는 파이썬 표준 라이브러리이기 때문에 쉽고 간단한 GUI 프로그램을 만들 때 활용될 수 있다.
여기서는 Python 3.4에 있는 Tkinter를 사용하며, Tkinter의 기본적인 개념 및 기초 사용법 만을 소개한다.

2. Tkinter의 기본 문장

Tkinter는 파이썬에 기본 내장되어 있기 때문에 PyQt처럼 별도로 설치할 필요가 없다. Tkinter를 사용하기 위해서는 먼저 tkinter 모듈을 아래와 같이 import 해야 한다 (주: Python 2에서는 Tkinter를 import 하고, Python 3 에서는 tkinter를 import 한다). tkinter 모듈을 import한 다음에는 Tk 클래스 객체(root)를 생성하고, 이 객체의 mainloop() 메서드를 호출한다. 아래 코드와 같이 이런 기본 문장들을 수행하면, 빈 다이얼로그가 화면에 표시된다.

from tkinter import *
root = Tk()
root.mainloop()

mainloop()는 이벤트 메시지 루프로서 키보드나 마우스 혹은 화면 Redraw와 같은 다양한 이벤트로부터 오는 메시지를 받고 전달하는 역활을 한다.

3. 간단한 다이얼로그

그럼 Tkinter를 이용하여 간단한 다이얼로그를 만들어 보는데, 이 다이얼로그에는 하나의 레이블, 하나의 텍스트박스, 하나의 버튼이 있다고 가정하자. 이러한 위젯들은 보통 root 객체 생성(root = Tk())과 root.mainloop() 사이에 생성하게 된다. 아래 예제는 "이름" 이라는 레이블(Label 위젯)과 중간에 텍스트박스(Entry 위젯) 하나, 그리고 맨 밑에 OK 버튼(Button 위젯)을 가지도록 한 코드이다 (여기서 pack에 대해서 아래 설명).

from tkinter import *
root = Tk()

lbl = Label(root, text="이름")
lbl.pack()

txt = Entry(root)
txt.pack()

btn = Button(root, text="OK")
btn.pack()

root.mainloop()

4. Geometry Manager

Tkinter에서 위젯들을 화면에 배치하는 방식에는 다음과 같은 3가지 방식이 있다.

  • Place (혹은 absolute) 위젯을 위치를 절대 좌표로 정하는 것으로, 윈도우 크기 변경에 따라 위젯들이 변경되지 않으므로 많이 사용되지 않는다. 이 방식은 위젯.place() 메서드를 사용한다.
  • Pack 위젯들을 부모 위젯에 모두 패킹하여 불필요한 공간을 없앤다. 위젯.pack() 메서드를 사용한다.
  • Grid 위젯들을 테이블 레이아웃에 배치하는 것으로 지정된 row, column에 위젯을 놓는다. 위젯.grid() 메서드를 사용한다.

위의 #3 예제에서는 pack 방식을 사용하여 위젯들이 상하(디폴트)로 패킹되었음을 보았다. 아래 예제는 grid 방식으로 위젯을 배치하는 예이다. grid() 메소드에서 row와 column을 정해 주면, 해당 위치에 위젯이 놓이게 된다.

from tkinter import *
root = Tk()

lbl = Label(root, text="이름")
lbl.grid(row=0, column=0)
txt = Entry(root)
txt.grid(row=0, column=1)
btn = Button(root, text="OK", width=15)
btn.grid(row=1, column=1)

root.mainloop()
본 웹사이트는 광고를 포함하고 있습니다. 광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.