Chapter 2: Tkinter UI 요소 완전 정복¶
👋 GUI 프로그램의 세계로!¶
안녕하세요! Chapter 1에서 파이썬 기초를 배웠으니, 이제 진짜 재미있는 부분을 시작해봅시다!
지금까지는 검은 화면에 글자만 나오는 프로그램을 만들었는데, 이번에는 버튼, 입력창, 메뉴가 있는 진짜 프로그램을 만들어보겠습니다.
🎯 이번 챕터에서 배울 것들¶
Tkinter를 선택하는 이유:
- ✅ 파이썬에 기본으로 포함되어 있음 (별도 설치 불필요)
- ✅ 배우기 쉬움 (초보자 친화적)
- ✅ 윈도우, 맥, 리눅스 모두에서 동작
- ✅ KRenamer 같은 데스크톱 앱에 완벽
학습할 UI 요소들:
- 🖼️ 기본 구조: 창(Window)과 기본 설정들
- 📝 텍스트 요소: Label, Entry, Text
- 🔘 버튼과 체크박스: Button, Checkbutton, Radiobutton
- 📋 목록과 선택: Listbox, Combobox
- 🖼️ 레이아웃: Frame, 배치 관리자들
- 🎨 고급 요소: Canvas, Menu, Scrollbar
📚 1. 기본 구조 - 모든 GUI의 출발점¶
첫 번째 창 만들어보기¶
| src/chapter2/01_basic_window.py | |
|---|---|
위 코드를 실행하면 간단한 GUI 창이 나타납니다. 제목 표시줄과 크기가 설정된 기본 창의 모습입니다.

💡 tkinter 기본 구조 이해하기
모든 tkinter 프로그램의 필수 3단계:
import tkinter as tk→ tkinter 라이브러리 가져오기root = tk.Tk()→ 메인 창 만들기root.mainloop()→ 창 보여주고 사용자 입력 기다리기
창 설정 옵션들¶
| src/chapter2/02_window_config.py | |
|---|---|

📝 2. 텍스트 요소들 - 정보를 보여주고 받기¶
Label - 텍스트와 이미지 표시¶
Label 위젯의 다양한 스타일링 옵션들을 보여주는 예제입니다. 기본 라벨, 스타일 적용된 라벨, 여러 줄 라벨, 그리고 동적으로 변경되는 라벨을 확인할 수 있습니다.

Entry - 한 줄 텍스트 입력¶
Entry 위젯은 사용자로부터 한 줄의 텍스트를 입력받을 때 사용합니다. 단계별로 살펴보겠습니다.
🔹 1단계: 기본 Entry 만들기¶
Entry 위젯을 사용한 텍스트 입력 예제입니다. 일반 텍스트 입력창을 확인할 수 있습니다.

🔹 2단계: 다양한 Entry 스타일¶
일반 텍스트, 비밀번호(별표 표시), 읽기 전용, 색상이 적용된 다양한 Entry 위젯의 스타일을 보여주는 예제입니다.

🔹 3단계: 입력값 검증과 처리¶
사용자 입력값을 검증하고 결과를 표시하는 예제입니다. 이름, 나이, 이메일 입력 필드와 검증 결과를 확인할 수 있습니다.

💡 Entry 위젯 핵심 포인트
.get(): Entry에서 텍스트 가져오기.insert(position, text): 특정 위치에 텍스트 삽입.delete(start, end): 특정 범위의 텍스트 삭제show="*": 비밀번호처럼 문자를 숨김 처리state="readonly": 읽기 전용으로 설정
Text - 여러 줄 텍스트 입력/표시¶
Text 위젯은 Entry와 달리 여러 줄의 텍스트를 다룰 때 사용합니다. 단계별로 알아보겠습니다.
🔹 1단계: 기본 Text 위젯¶
여러 줄 텍스트를 입력하고 편집할 수 있는 기본 Text 위젯의 사용 예제입니다. 단어 단위 줄바꿈과 배경색이 적용되어 있습니다.

🔹 2단계: 스크롤이 있는 Text¶
ScrolledText 위젯을 사용한 예제로, 많은 양의 텍스트를 스크롤바를 통해 효과적으로 탐색할 수 있습니다.

🔹 3단계: Text 조작 기능들¶

💡 Text 위젯 핵심 포인트
- Text vs Entry: Entry는 한 줄, Text는 여러 줄
- 위치 표시:
"1.0"= 1번째 줄, 0번째 문자 (첫 번째 위치) tk.END: 텍스트의 마지막 위치wrap=tk.WORD: 단어 단위로 줄바꿈 (긴 줄을 자동으로 감쌈)- ScrolledText: 스크롤바가 자동으로 추가된 Text 위젯
🔘 3. 버튼과 선택 요소들¶
Button - 클릭 이벤트 처리¶
Button 위젯의 다양한 기능들을 보여주는 예제입니다. 기본 버튼, 색상이 적용된 버튼들, 그리고 메시지박스와 연동된 특별한 기능 버튼들을 확인할 수 있습니다.

Checkbutton과 Radiobutton - 선택 옵션¶
Checkbutton과 Radiobutton의 차이점을 보여주는 예제입니다. 체크박스는 여러 개를 동시에 선택할 수 있고, 라디오버튼은 하나만 선택할 수 있습니다. 선택 결과를 처리하는 방법도 함께 보여줍니다.

📋 4. 목록과 선택 요소들¶
Listbox - 목록 선택¶
Listbox는 여러 항목 중에서 하나 또는 여러 개를 선택할 수 있는 목록을 만들 때 사용합니다.
🔹 1단계: 기본 Listbox¶
단일 선택이 가능한 Listbox 위젯 예제입니다.

🔹 2단계: 다중 선택 Listbox¶
다중 선택이 가능한 Listbox 위젯 예제입니다.

🔹 3단계: Listbox 항목 추가/삭제¶

Listbox를 사용해 할 일을 추가·삭제·전체 삭제할 수 있는 간단한 To-Do 리스트 관리 프로그램입니다.
💡 Listbox 핵심 포인트
.curselection(): 선택된 항목의 인덱스 반환 (튜플 형태).get(index): 특정 인덱스의 항목 텍스트 가져오기.insert(position, text): 항목 추가 (tk.END로 마지막에 추가).delete(index): 항목 삭제 (인덱스 범위도 가능)selectmode=tk.MULTIPLE: 다중 선택 모드.size(): 총 항목 개수 확인
Combobox - 드롭다운 선택¶

Combobox 위젯을 사용한 드롭다운 선택 예제입니다. 읽기 전용과 편집 가능한 두 가지 모드, 그리고 선택 결과 표시를 확인할 수 있습니다.
🖼️ 5. 레이아웃과 구조 요소들¶
Frame - 위젯 그룹화¶

Frame을 이용해 상단·중앙·하단 레이아웃을 구성하고, 내부 위젯 배치에는 pack(좌우/상하 정렬)과 grid(격자 배치)를 함께 활용할 수 있음을 보여주는 예제입니다.
레이아웃 매니저 심화¶

ttk 위젯과 복잡한 레이아웃을 사용한 고급 GUI 구성 예제입니다. 제목, 설정 패널, 탭 미리보기 등 실제 애플리케이션에서 사용되는 구조를 보여줍니다.
🎨 6. 고급 위젯들¶
Canvas - 그림 그리기¶
Canvas는 그림을 그리거나 도형을 표시할 수 있는 위젯입니다. 게임, 차트, 그래픽 도구 등을 만들 때 사용됩니다.
🔹 1단계: 기본 도형 그리기¶

Canvas 위젯을 사용해서 직사각형, 원, 직선, 다각형 등 다양한 기본 도형을 그리는 예제입니다. 각 도형에 색상과 테두리를 적용할 수 있습니다.
🔹 2단계: 마우스로 그리기¶

🔹 3단계: 간단한 그래프 그리기¶

| src/chapter2/12c_canvas_chart.py | |
|---|---|
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | |
💡 Canvas 핵심 포인트
.create_rectangle(x1, y1, x2, y2): 직사각형 그리기.create_oval(x1, y1, x2, y2): 원/타원 그리기.create_line(x1, y1, x2, y2): 직선 그리기.create_polygon(points): 다각형 그리기 (points는 [x1,y1,x2,y2,...] 형태).create_text(x, y, text="..."): 텍스트 표시.delete("all"): 모든 그림 지우기- 마우스 이벤트:
<Button-1>,<B1-Motion>,<ButtonRelease-1> - 색상과 스타일:
fill,outline,width옵션으로 꾸미기
Menu - 메뉴바¶
대부분의 GUI 응용프로그램에는 맨 위에 메뉴바가 있습니다. 파일, 편집, 보기, 도움말 등의 메뉴를 만들어 보겠습니다.
🔹 1단계: 기본 메뉴 만들기¶
기본 메뉴바가 있는 tkinter 창의 실제 모습입니다. 상단에 "파일"과 "도움말" 메뉴가 표시되어 있습니다.

🔹 2단계: 텍스트 에디터 메뉴¶
실제 텍스트 에디터의 모습입니다. "파일"과 "편집" 메뉴가 있고, Text 위젯에 설명 텍스트가 표시되어 있습니다. 각 메뉴 항목에는 키보드 단축키(accelerator)가 표시됩니다.

| src/chapter2/13b_text_editor_menu.py | |
|---|---|
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | |
🔹 3단계: 고급 메뉴 (서브메뉴, 체크표시)¶
고급 메뉴 기능들을 보여주는 실제 GUI입니다. "파일", "보기", "도구", "도움말" 메뉴가 있으며, 체크박스 메뉴(✓ 표시), 라디오버튼 메뉴(● 표시), 서브메뉴 등의 고급 기능들을 확인할 수 있습니다. 하단에는 상태바가 표시되어 있습니다.

| src/chapter2/13c_advanced_menu.py | |
|---|---|
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | |
💡 Menu 핵심 포인트
tk.Menu(parent, tearoff=0): 메뉴 생성 (tearoff=0으로 떼어낼 수 없게).add_cascade(label, menu): 상위 메뉴에 하위 메뉴 추가.add_command(label, command): 일반 메뉴 항목 추가.add_checkbutton(label, variable, command): 체크박스 메뉴 항목.add_radiobutton(label, variable, value): 라디오버튼 메뉴 항목.add_separator(): 구분선 추가accelerator="Ctrl+N": 단축키 표시 (실제 기능은 bind로 구현)root.config(menu=menubar): 루트 윈도우에 메뉴바 연결
🌟 핵심 개념¶
이벤트 기반 프로그래밍:
def event_handler():
# 사용자 액션에 반응하는 코드
pass
button = tk.Button(root, text="클릭", command=event_handler)
위젯 속성 설정:
동적 내용 업데이트:
🎉 Chapter 2 완주 축하드려요!
Tkinter의 모든 핵심 UI 요소들을 성공적으로 배웠습니다!
이제 할 수 있는 것들:
- ✅ 모든 종류의 GUI 위젯 사용하기
- ✅ 복잡한 레이아웃 구성하기
- ✅ 사용자 입력 처리하고 검증하기
- ✅ 이벤트 기반 프로그래밍하기
- ✅ 실용적인 데스크톱 애플리케이션 설계하기