강의노트 Entry
entry
entry는 한 줄의 텍스트를 입력할 수 있는 위젯이다. 웹사이트나 앱에서 아이디, 비밀번호, 이름 등을 입력하는 칸이 바로 이 Entry 위젯과 비슷하다고 생각하면 된다.

기본 entry 생성
from tkinter import *
win = Tk()
L1 = Label(win, text="이름 : ") #1
L1.pack(side=LEFT) #2
E1 = Entry(win, bd=5) #3
E1.pack(side=RIGHT) #4
win.mainloop()
- 레이블 L1에 엔트리의 설명을 써넣는다
- 레이블을 창의 왼쪽에 붙인다.
- 테두리가 5인 엔트리를 win안에 만든다.
- 엔트리를 win의 오른쪽으로 붙인다.
entry의 글자 모양이나 크기는 "font=('Arial', 14)"와 같은 entry의 옵션으로 제공한다.
entry에 입력하는 글자를 '*'로 표시하는 방법은 "show='*' "의 옵션을 입력하면 된다.
entry에 입력한 문자열은 "entry변수명.get()"으로 가져올 수 있다.
"entry변수명.delete(0,END)"는 entry에 입력한 모든 문자열을 지운다.
entry의 주요 옵션들
entry 위젯의 중요한 옵션은 다음과 같다.
| 열 1 | 열 2 | 열 3 |
|---|---|---|
| textvariable | tk.StringVar와 연결하여 실시간으로 텍스트를 제어하는 데 필수적입니다. | 텍스트 |
| width | 위젯의 너비를 문자의 개수로 지정 | ttk.Entry(root, width=40) |
| show | 입력되는 텍스트 대신 다른 문자를 표시 | ttk.Entry(root, show="" ) |
| state | 위젯의 상태를 제어, normal(텍스트를 입력하고 수정), disabled(비활정화), readonly(읽을수는 있지만 수정 불가) | ttk.Entry(root, state="disabled") |
| font | 입력되는 텍스트의 글꼴, 크기, 스타일을 지정 (글꼴이름, 크기, 스타일)형식으로 사용 | ttk.Entry(root, font=("Malgun Gothic", 12)) |
| justify | 텍스트의 정렬 방식을 지정, left, center, right중 하나를 사용 | ttk.Entry(root, justify="center") |
예제
entry의 텍스트를 지우고 활성화시키는 예제
import tkinter as tk
win = tk.Tk()
win.geometry('300x250')
entvar = tk.StringVar()
ent = tk.Entry(win,textvariable=entvar,
justify=tk.CENTER,state='disabled')
lbl = tk.Label(win, text='',font=('바탕',16))
def frun0():
ent.config(state='normal')
def frun1():
s = entvar.get()
lbl.config(text=s)
entvar.set('')
def frun2():
s = ent.get()
lbl.config(text=s)
ent.delete(0,tk.END)
def frun3():
s = entvar.get()
s = s[0:(len(s)-1)]
entvar.set(s)
def fquit():
win.destroy()
btn0 = tk.Button(win, text='Activate',command=frun0)
btn1 = tk.Button(win, text='실행1',command=frun1)
btn2 = tk.Button(win, text='실행2',command=frun2)
btn3 = tk.Button(win, text='<-',command=frun3)
btn4 = tk.Button(win, text='Quit',command=fquit)
ent.pack()
lbl.pack()
btn0.pack(side='left',padx=10)
btn1.pack(side='left',padx=10)
btn2.pack(side='left',padx=10)
btn3.pack(side='left',padx=10)
btn4.pack(side='left',padx=10)
win.mainloop()
entry와 label을 이용한 프로그램
entry 위젯으로 사용자 입력을 받고, 그 내용을 Label에 실시간으로 표시
import tkinter as tk
root = tk.Tk()
root.title("실시간 입력 & 표시")
root.geometry("400x200")
root.resizable(False, False) # 윈도우 크기 변경 불가
# 1. Entry와 Label을 연결할 Tkinter 문자열 변수 생성
str_var = tk.StringVar()
str_var.set("이곳에 이름을 입력하세요.") # Entry의 초기 텍스트 설정
# 2. Entry 위젯 생성: 사용자가 텍스트를 입력할 곳
# textvariable을 str_var와 연결하여 Entry의 내용이 자동으로 str_var에 저장되도록 합니다.
input_entry = tk.Entry(
root,
textvariable=str_var, # StringVar와 연결
width=35, # Entry의 너비를 대략 35글자 폭으로 설정
font=("Malgun Gothic", 14), # 글꼴과 크기 설정
justify=tk.CENTER # 텍스트를 가운데 정렬
)
input_entry.pack(pady=20) # 상하 여백 20px
# Entry 위젯에 프로그램 시작 시 자동으로 커서가 가도록 설정
input_entry.focus_set()
# 3. Label 위젯 생성: Entry에 입력된 내용을 실시간으로 보여줄 곳
# textvariable을 str_var와 연결하여 entry의 내용이 바뀔 때마다 Label도 업데이트됩니다.
display_label = tk.Label(
root,
textvariable=str_var, # StringVar와 연결
font=("Malgun Gothic", 18, "bold"), # 글꼴, 크기, 스타일 설정
foreground="blue" # 글자색 설정
)
display_label.pack(pady=10) # 상하 여백 10px
# 4. 안내 메시지 Label
info_label = tk.Label(
root,
text="Entry에 텍스트를 입력하면 Label에 바로 나타납니다!",
font=("Malgun Gothic", 10),
foreground="gray"
)
info_label.pack(pady=5)
root.mainloop()
tk.StringVar()로 str_var변수를 생성하고, 이 변수를 tk.Entry의 textvariable과 tk.Label의 textvariable에 모두 연결한다.
이렇게 하면 Entry에 텍스트를 입력하는 즉시 str_var변수의 값이 바뀌고, 그 변화가 Label에도 반영되어 화면에 실시간으로 표시된다.
예1
사용자 이름과 패스워드를 입력받는 시스템을 만든다. 사용자 이름과 패스워드는 Arial, 14포인트이고 패스워드는 입력하면 ''로 보이게 만든다.

import tkinter as tk
def fend():
window.destroy()
def frun():
s = e2.get()
print(s)
if s == '1234':
lbl3.configure(text='맞는 비번입니다.')
else:
lbl3.configure(text='틀린 비번입니다.')
window = tk.Tk()
window.title('비밀번호 입력')
lbl1 = tk.Label(window, text='사용자 : ')
lbl1.grid(row = 0, column=0)
lbl3 = tk.Label(window, text='')
lbl3.grid(row = 2, column=0,columnspan=2)
e1 = tk.Entry(window, show=None, font=('Arial', 14))
e1.focus_set()
e1.grid(row = 0, column=1)
lbl2 = tk.Label(window, text='비밀번호 : ')
lbl2.grid(row = 1, column=0)
e2 = tk.Entry(window, show='*', font=('Arial', 14))
e2.grid(row = 1, column=1)
b1 = tk.Button(window,text='실행',command=frun)
b1.grid(row=3, column=0,ipadx=10)
b2 = tk.Button(window,text='종료',command=fend)
b2.grid(row=3, column=1)
window.mainloop()
예2
다음 그림과 같은 창을 만들어라. 폰트는 Arial, 18폰트로 사용한다.
레이블은 엔트리에 입력한 이름을 합해서 결과를 출력한다.

답)
from tkinter import *
def fres():
s = '입력한 이름은 '+E1.get()+'입니다.'
L2.configure(text=s)
def fend():
win.destroy()
win = Tk()
L1 = Label(win, text="이름 :", font=('Arial',18))
L1.grid(row=0, column=0)
E1 = Entry(win, bd=5, font=('Arial',18))
E1.grid(row=0, column=2)
L2 = Label(win, text="입력한 이름은:", font=('Arial',18))
L2.grid(row=1, column=0,columnspan=3)
b1 = Button(win,text='실행',font=('Arial',18), command=fres)
b1.grid(row=2, column=1)
b2 = Button(win,text='종료',font=('Arial',18), command=fend)
b2.grid(row=2, column=2)
win.mainloop()
연습문제
- "당신의 이름을 입력하세요:"라는 Label과 옆에 이름을 입력할 Entry를 만든다. Entry 아래에 "환영합니다!"라는 초기 텍스트를 가진 Label을 만든다.
"인사하기" 버튼을 만들고, 이 버튼을 클릭하면 Entry에 입력된 이름으로 "환영합니다, [이름]님!"과 같이 아래 Label의 텍스트가 바뀌도록 만든다.

정답 :
import tkinter as tk
root = tk.Tk()
root.title("이름 입력 및 환영 메시지")
root.geometry("350x200")
#root.resizable(False, False)
# 이름 입력 Entry와 연결할 StringVar
name_var = tk.StringVar()
# 환영 메시지를 표시할 Label과 연결할 StringVar
welcome_message_var = tk.StringVar()
welcome_message_var.set("환영합니다!") # 초기 메시지 설정
# 이름 입력 안내 Label
name_label = tk.Label(root, text=" 이름 :", font=("Malgun Gothic", 12))
name_label.grid(row=0,column=0, padx=5)
# 이름 입력 Entry
name_entry = tk.Entry(root, textvariable=name_var, width=15, font=("Malgun Gothic", 12))
name_entry.grid(row=0,column=1, padx=5)
name_entry.focus_set()
# 환영 메시지 Label
message_label = tk.Label(root, textvariable=welcome_message_var, font=("Malgun Gothic", 16, "bold"), foreground="green")
message_label.grid(row=1,column=0,columnspan=2, padx=5)
# 인사하기 버튼 클릭 시 실행될 함수
def greet_user():
name = name_var.get().strip() # Entry에서 이름 가져오기 및 양쪽 공백 제거
if name: # 이름이 비어있지 않다면
welcome_message_var.set(f"환영합니다, {name}님!")
else: # 이름이 비어있다면
welcome_message_var.set("이름을 입력해주세요!")
name_entry.focus_set() # 다시 Entry로 포커스 이동
# 인사하기 버튼
greet_button = tk.Button(root, text="인사하기", command=greet_user)
greet_button.grid(row=2,column=0, padx=5)
root.mainloop()
- "비밀번호:"라는 Label과 비밀번호를 입력할 Entry를 만드세요. Entry에는 입력 내용이 로 표시되도록 설정하세요.
Entry 아래에 "비밀번호를 입력하세요."라는 초기 텍스트를 가진 Label을 만드세요.
"확인" 버튼을 만들고, 버튼 클릭 시 Entry의 비밀번호가 "1234"와 같으면 아래 Label에 "로그인 성공!"을, 다르면 "로그인 실패!"를 표시하도록 만드세요.
정답 :
import tkinter as tk
root = tk.Tk()
root.title("비밀번호 입력 확인")
root.geometry("350x200")
# 비밀번호 Entry와 연결할 StringVar
password_var = tk.StringVar()
# 결과 메시지를 표시할 Label과 연결할 StringVar
result_message_var = tk.StringVar()
result_message_var.set("비밀번호를 입력하세요.") # 초기 메시지
# Frame을 사용하여 Label과 Entry를 한 줄에 배치
input_frame = tk.Frame(root)
input_frame.pack(pady=10)
# 비밀번호 안내 Label
pw_label = tk.Label(input_frame, text="비밀번호:", font=("Malgun Gothic", 12))
pw_label.pack(side=tk.LEFT, padx=5)
# 비밀번호 Entry (입력 내용이 '*'로 표시됨)
pw_entry = tk.Entry(input_frame, textvariable=password_var, show="*", width=25, font=("Malgun Gothic", 12))
pw_entry.pack(side=tk.LEFT, padx=5)
pw_entry.focus_set()
# 결과 메시지 Label
result_label = tk.Label(root, textvariable=result_message_var, font=("Malgun Gothic", 14, "bold"))
result_label.pack(pady=20)
# 확인 버튼 클릭 시 실행될 함수
def check_password():
entered_password = password_var.get() # Entry에서 비밀번호 가져오기
correct_password = "1234" # 정답 비밀번호 설정
if entered_password == correct_password:
result_message_var.set("로그인 성공!")
result_label.config(foreground="blue") # 성공 시 파란색 글자
else:
result_message_var.set("로그인 실패!")
result_label.config(foreground="red") # 실패 시 빨간색 글자
password_var.set("") # 비밀번호 입력 필드 초기화
pw_entry.focus_set() # 다시 Entry로 포커스 이동
# 확인 버튼
check_button = tk.Button(root, text="확인", command=check_password)
check_button.pack(pady=10)
root.mainloop()
- "숫자를 입력하세요:"라는 Label과 숫자를 입력할 Entry를 만드세요.
Entry 아래에 "결과:"라는 초기 텍스트를 가진 Label을 만드세요.
"입력" 버튼을 만들고, 이 버튼을 클릭하면 Entry에 입력된 값이 숫자인지 확인하세요.
숫자이면 아래 Label에 "입력된 숫자: [입력값]"을 표시하세요.
숫자가 아니면 아래 Label에 "유효한 숫자가 아닙니다!"를 표시하세요. (힌트: isdigit() 문자열 메서드를 사용해 보세요.)
정답 :
import tkinter as tk
root = tk.Tk()
root.title("숫자만 입력받기")
root.geometry("350x200")
root.resizable(False, False)
# 숫자 입력 Entry와 연결할 StringVar
number_var = tk.StringVar()
# 결과 메시지를 표시할 Label과 연결할 StringVar
result_message_var = tk.StringVar()
result_message_var.set("결과:") # 초기 메시지
# Frame을 사용하여 Label과 Entry를 한 줄에 배치
input_frame = tk.Frame(root)
input_frame.pack(pady=10)
# 숫자 입력 안내 Label
num_label = tk.Label(input_frame, text="숫자를 입력하세요:", font=("Malgun Gothic", 12))
num_label.pack(side=tk.LEFT, padx=5)
# 숫자 입력 Entry
num_entry = tk.Entry(input_frame, textvariable=number_var, width=25, font=("Malgun Gothic", 12))
num_entry.pack(side=tk.LEFT, padx=5)
num_entry.focus_set()
# 결과 메시지 Label
result_label = tk.Label(root, textvariable=result_message_var, font=("Malgun Gothic", 14, "bold"))
result_label.pack(pady=20)
# 입력 버튼 클릭 시 실행될 함수
def validate_number():
input_value = number_var.get().strip() # Entry에서 값 가져오기 및 공백 제거
if input_value.isdigit(): # isdigit()은 문자열이 모두 숫자로 구성되어 있는지 확인
result_message_var.set(f"입력된 숫자: {input_value}")
result_label.config(foreground="blue")
else:
result_message_var.set("유효한 숫자가 아닙니다!")
result_label.config(foreground="red")
number_var.set("") # Entry 내용 초기화
num_entry.focus_set() # 다시 Entry로 포커스 이동
# 입력 버튼
submit_button = tk.Button(root, text="입력", command=validate_number)
submit_button.pack(pady=10)
root.mainloop()
- "여기에 텍스트를 입력하세요."라는 초기 텍스트를 가진 Entry를 만드세요.
Entry 아래에 "초기화" 버튼을 만드세요.
"초기화" 버튼을 클릭하면 Entry의 내용이 모두 지워지도록 만드세요. (힌트: textvariable의 set("")을 사용하거나, Entry 자체의 delete() 메서드를 사용해 보세요.)
정답 :
import tkinter as tk
root = tk.Tk()
root.title("Entry 내용 초기화")
root.geometry("300x150")
root.resizable(False, False)
# Entry와 연결할 StringVar
text_to_clear_var = tk.StringVar()
text_to_clear_var.set("여기에 텍스트를 입력하세요.") # 초기 텍스트
# Entry 위젯
my_entry = tk.Entry(
root,
textvariable=text_to_clear_var,
width=40,
font=("Malgun Gothic", 12),
justify=tk.CENTER
)
my_entry.pack(pady=30)
my_entry.focus_set()
# 초기화 버튼 클릭 시 실행될 함수
def clear_entry():
# 방법 1: textvariable의 값을 빈 문자열로 설정
text_to_clear_var.set("")
# 방법 2: Entry 위젯의 delete() 메서드 사용 (시작 인덱스, 끝 인덱스)
# my_entry.delete(0, tk.END) # 0부터 끝까지 모든 텍스트 삭제
my_entry.focus_set() # 초기화 후 다시 Entry로 포커스 이동
# 초기화 버튼
clear_button = tk.Button(root, text="초기화", command=clear_entry)
clear_button.pack(pady=10)
root.mainloop()
로그인 하면 댓글을 쓸 수 있습니다.