Chapter 21. 입력 컨트롤
TKINTER
Chapter 21. 입력 컨트롤
입력 컨트롤에 대해 알아보고 다양한 위젯을 사용하는 방법을 배워봅니다.

21.1 입력 컨트롤이란?
입력 컨트롤(Input Control)은 사용자로부터 데이터를 입력받거나 화면에 정보를 출력하기 위한 GUI 구성 요소(Widget)입니다. Tkinter에서는 다양한 위젯을 제공하지만, 가장 많이 사용하는 입력 컨트롤은 다음과 같습니다.
- Label
- Entry
- Button
- Text
회원관리 프로그램, 게시판 프로그램, 메모장 프로그램 등 대부분의 GUI 프로그램에서 사용하는 기본 위젯입니다.
입력 컨트롤의 종류
| 컨트롤 | 기능 |
|---|---|
| Label | 문자열 출력 |
| Entry | 한 줄 입력 |
| Button | 버튼 클릭 |
| Text | 여러 줄 입력 |
21.2 Label
Label은 문자나 숫자를 화면에 출력하는 컨트롤입니다. 사용자가 수정할 수 없는 내용을 표시할 때 사용합니다.
Label 생성
Python
import tkinter as tk
window = tk.Tk()
label = tk.Label(
window,
text="안녕하세요."
)
label.pack()
window.mainloop()
글자 크기 변경
Python
label = tk.Label(
window,
text="회원관리",
font=("맑은 고딕",16)
)
1글자 색상
Python
label = tk.Label(
window,
text="Python",
fg="blue"
)
배경색
Python
label = tk.Label(
window,
text="Python",
bg="yellow"
)
21.3 Entry
Entry는 한 줄의 문자열을 입력받는 컨트롤입니다. 회원 이름, 아이디, 나이 등을 입력할 때 사용합니다.
Entry 생성
Python
entry = tk.Entry(window) entry.pack()
입력값 가져오기
Python
name = entry.get() print(name)
입력값 삭제
Python
entry.delete(0,tk.END)
기본값 입력
Python
entry.insert(0,"홍길동")
비밀번호 입력
Python
password = tk.Entry(
window,
show="*"
)
입력한 문자가 ******처럼 표시됩니다.
21.4 Button
Button은 사용자가 클릭하여 특정 기능을 실행하는 컨트롤입니다.
Button 생성
Python
button = tk.Button(
window,
text="등록"
)
button.pack()
버튼 클릭 이벤트
Python
import tkinter as tk
def hello():
print("버튼 클릭")
window = tk.Tk()
button = tk.Button(
window,
text="확인",
command=hello
)
button.pack()
window.mainloop()
버튼 클릭 시 출력

버튼 색상
Python
button = tk.Button(
window,
text="등록",
bg="lightblue"
)
버튼 크기
Python
button = tk.Button(
window,
text="등록",
width=15,
height=2
)
Entry와 Button 함께 사용하기
Python
import tkinter as tk
def show():
print(entry.get())
window = tk.Tk()
entry = tk.Entry(window)
entry.pack()
button = tk.Button(
window,
text="확인",
command=show
)
button.pack()
window.mainloop()
입력한 문자열이 출력됩니다.
21.5 Text
Text는 여러 줄의 문자열을 입력받는 컨트롤입니다. 게시판 내용이나 메모장을 만들 때 사용합니다.
Text 생성
Python
text = tk.Text(
window,
width=40,
height=10
)
text.pack()
입력값 가져오기
Python
content = text.get(
"1.0",
tk.END
)
print(content)
1.0은 첫 번째 줄 첫 번째 문자를 의미합니다.
내용 삭제
Python
text.delete(
"1.0",
tk.END
)
내용 추가
Python
text.insert(
tk.END,
"안녕하세요."
)
21.6 회원 입력 화면
Python
import tkinter as tk
window = tk.Tk()
window.title("회원관리")
tk.Label(window,text="이름").grid(row=0,column=0)
entry_name = tk.Entry(window)
entry_name.grid(row=0,column=1)
tk.Label(window,text="나이").grid(row=1,column=0)
entry_age = tk.Entry(window)
entry_age.grid(row=1,column=1)
button = tk.Button(
window,
text="등록"
)
button.grid(row=2,column=0,columnspan=2)
window.mainloop()
실행 화면

21.7 컨트롤 비교
| 컨트롤 | 입력 | 여러 줄 |
|---|---|---|
| Label | X | X |
| Entry | O | X |
| Button | X | X |
| Text | O | O |
21.8 복합 예제
Python
from tkinter import *
def register():
emp_id = entry_id.get().strip()
name = entry_name.get().strip()
phone = entry_phone.get().strip()
address = entry_address.get().strip()
if not emp_id and not name and not phone and not address:
return
text_area.insert(
END,
f"사번: {emp_id} 이름: {name} 전화번호: {phone} 주소: {address}\n",
)
entry_id.delete(0, END)
entry_name.delete(0, END)
entry_phone.delete(0, END)
entry_address.delete(0, END)
entry_id.focus()
window = Tk()
window.title("회원관리 프로그램")
window.geometry("480x460")
window.resizable(False, False)
Label(window, text="회원관리 프로그램", font=("맑은 고딕", 18, "bold")).pack(pady=16)
form = Frame(window)
form.pack()
Label(form, text="사번:", font=("맑은 고딕", 11)).grid(
row=0, column=0, sticky=E, padx=8, pady=6
)
entry_id = Entry(form, width=30, font=("맑은 고딕", 11))
entry_id.grid(row=0, column=1, padx=8, pady=6)
Label(form, text="이름:", font=("맑은 고딕", 11)).grid(
row=1, column=0, sticky=E, padx=8, pady=6
)
entry_name = Entry(form, width=30, font=("맑은 고딕", 11))
entry_name.grid(row=1, column=1, padx=8, pady=6)
Label(form, text="전화번호:", font=("맑은 고딕", 11)).grid(
row=2, column=0, sticky=E, padx=8, pady=6
)
entry_phone = Entry(form, width=30, font=("맑은 고딕", 11))
entry_phone.grid(row=2, column=1, padx=8, pady=6)
Label(form, text="주소:", font=("맑은 고딕", 11)).grid(
row=3, column=0, sticky=E, padx=8, pady=6
)
entry_address = Entry(form, width=30, font=("맑은 고딕", 11))
entry_address.grid(row=3, column=1, padx=8, pady=6)
buttons = Frame(window)
buttons.pack(pady=16)
Button(buttons, text="등록", width=10, font=("맑은 고딕", 10), command=register).pack(
side=LEFT, padx=8
)
Button(
buttons, text="종료", width=10, font=("맑은 고딕", 10), command=window.destroy
).pack(side=LEFT, padx=8)
text_frame = Frame(window)
text_frame.pack(padx=16, pady=(0, 16), fill=BOTH, expand=True)
scrollbar = Scrollbar(text_frame)
scrollbar.pack(side=RIGHT, fill=Y)
text_area = Text(
text_frame,
width=52,
height=10,
font=("맑은 고딕", 10),
yscrollcommand=scrollbar.set,
)
text_area.pack(side=LEFT, fill=BOTH, expand=True)
scrollbar.config(command=text_area.yview)
entry_id.focus()
window.mainloop()

📌 Chapter 21 핵심 정리
- 입력 컨트롤은 사용자로부터 데이터를 입력받거나 정보를 출력하는 GUI 구성 요소입니다.
- Label은 수정할 수 없는 내용을 표시하는 위젯입니다.
- Entry는 한 줄의 문자열을 입력받는 위젯입니다.
- Button은 클릭하여 특정 기능을 실행하는 위젯입니다.
- Text는 여러 줄의 문자열을 입력받는 위젯입니다.