강의노트 Label
강의노트
• 조회수 1006
• 댓글 0
• 작성 2년 전
• 수정 1주 전
레이블
레이블은 텍스트나 이미지를 화면에 표시하는 위젯이다. 버튼처럼 클릭 동작을 처리하지 않아 레이블은 주로 정적인 정보를 표시하지만, 변수를 연결하여 동적으로 정보를 변경할 수 있다.
레이블의 기본 입력형태는
Label(master, **option)
레이블의 주요 옵션들은
옵션 | 설명 | 예 |
---|---|---|
text | 텍스트를 표시 | ttk.Label(root, text="어서 오세요!") |
image | 표시할 이미지(PhotoImage 객체를 사용) | |
compound | 텍스트와 이미지의 배치 방식 | top, bottom, left, right, center |
textvariable | tk.StringVar로 텍스트를 동적으로 바인딩, text_var가 바뀔 때마다 자동으로 업데이트됨 | label = ttk.Label(root, textvariable=text_var) |
font | 글꼴, 크기, 스타일을 지정한다. (글꼴 이름, 크기, 스타일)형식으로 사용 | ttk.Label(root, text="굵은 글씨", font=("Malgun Gothic", 18, "bold")) |
foreground(fg) | 텍스트 글자 색상을 설정 | ttk.Label(root, text="빨간 글씨", foreground="red", font=("Arial", 14)) |
anchor | 텍스트 정렬 | n, s, e, w, center |
justify | 여러줄 텍스트 정렬 | left, center, right |
padding | 안쪽 여백 (x, y 또는 튜플) | |
style | 적용할 ttk.Style 이름 |
배경색은 ttk.Label 옵션이 직접적으로 작동하지 않을 수 있다. ttk 위젯의 배경색을 바꾸려면 style을 사용해야 한다.
기본 예제
import tkinter as tk
root = tk.Tk()
root.title("Label 예제")
# 텍스트가 있는 Label 생성
label1 = tk.Label(root, text="안녕하세요! 이것은 Label입니다.")
label1.pack()
root.mainloop()
레이블 꾸미기
import tkinter as tk
root = tk.Tk()
root.title("Label 꾸미기 예제")
# 텍스트 라벨
label1 = tk.Label(root, text="파란 글자", fg="blue", font=("Arial", 20))
label1.pack(pady=10)
# 배경색 있는 라벨
label2 = tk.Label(root, text="노란 배경", bg="yellow", font=("Arial", 15))
label2.pack(pady=10)
# 여러 줄 표시
label3 = tk.Label(root, text="여러 줄의\n텍스트를\n표시할 수 있습니다.", font=("Arial", 12))
label3.pack(pady=10)
root.mainloop()
폰트 변경
"텍스트 정보 전달"과 "파이썬을 정복하자!!!"라는 글은 폰트는 Arial, 크기는 30포인트로 작성하는 레이블을 생성한다.
from tkinter import *
win = Tk()
label1 = Label(win, text = '텍스트로 정보 전달') #1
label2 = Label(win, text = '파이썬을 정복하자!!!', font=('arial', 30), fg = 'blue') #2
label1.pack() #3
label2.pack()
win.mainloop()
- 레이블을 생성하고 첫번째 텍스트 "텍스트로 정보 전달"을 써넣는다.
- 두번째 레이블을 생성하고 두번째 텍스트 "파이썬을 정복하자!!!"의 폰트를 arial, 크기는 30으로 잡고 글자 색은 파란색으로 한다.
- 작성된 레이블을 윈두우에 붙인다.
레이블에 이미지 표시하기 1
이 예제를 위해서는 이미지가 프로그램과 같은 폴더에 있다고 가정한다.
import tkinter as tk
root = tk.Tk()
root.title("Label 이미지 예제")
# 이미지 불러오기 (gif, png 등 가능)
photo = tk.PhotoImage(file="example.png")
label_img = tk.Label(root, image=photo)
label_img.pack()
root.mainloop()
주의: PhotoImage 객체는 지역변수가 되면 가비지 컬렉션에 의해 사라집니다. 따라서 반드시 변수에 저장해 두어야 합니다.
레이블에 이미지 표시하기 2
from tkinter import *
from PIL import ImageTk, Image
win = Tk()
photo = Image.open('./../data/images/tiger.bmp') #1
test = ImageTk.PhotoImage(photo) #2
lbl = Label(win, image=test) #3
lbl.pack()
win.mainloop()
- 특정 디렉터리에 있는 이미지를 불러온다.
- 이미지를 포토이미지로 바꿔준다.
- 레이블에 이미지를 넣는다.
레이블에 이미지 표시하기 3
tkinter창의 레이블에 이미지를 로드한다. 이를 위해서는 Python Imaging Library(PIL)을 사용한다.
다양한 형식(ppm, png, jpeg, gif, tiff)의 이미지를 열수 있다.
이미지 파일 로드하는 방법은 다음과 같다.
from tkinter import *
from PIL import Image, ImageTk #1
win = Tk()
win.geometry('200x200')
load = Image.open('./../data/images/clova_1.png') #2
render = ImageTk.PhotoImage(load) #3
lbl = Label(win, image=render) #4
lbl.place(x=10,y=10) #5
win.mainloop()
- 이미지를 읽기 위한 라이브러리를 불러온다. PIL에서 Image와 ImagTk를 불러온다.
- 이미지를 읽어온다. 이때 이미지('clova_1.png')는 프로그램과 같은 디랙토리에 있어야 한다.
- 읽어온 이미지를 포토이미지로 만든다.
- 포토이미지를 레이블에 연결한다.
- 레이블의 위치를 x축 왼쪽으로부터 10픽셀, y축 위에서 부터 10픽셀 떨어진 위치에 고정한다.
연습문제
- 창에 "Hello, Tkinter!"라는 글자를 파란색, 글꼴 Arial 20으로 가운데에 표시하세요.
정답 :
import tkinter as tk
root = tk.Tk()
root.title("과제 1")
root.geometry("300x200")
# Label 생성
label = tk.Label(root, text="Hello, Tkinter!", font=("Arial", 20))
label.pack(expand=True) # 화면 중앙에 배치
root.mainloop()
- 창에 3개의 Label을 만들고 각각 빨간 글씨 "빨강", 초록 글씨 "초록", 파란 글씨 "파랑"을 세로로 나열해 보세요.
정답 :
import tkinter as tk
def change_text():
label.config(text="버튼을 눌렀습니다!")
root = tk.Tk()
root.title("과제 2")
root.geometry("300x200")
# Label 생성
lbl1 = tk.Label(root, text="빨강", fg = 'red', font=("Arial", 15))
lbl2 = tk.Label(root, text="초록", fg = 'green', font=("Arial", 15))
lbl3 = tk.Label(root, text="파랑", fg = 'blue', font=("Arial", 15))
lbl1.pack(pady=20)
lbl2.pack(pady=20)
lbl3.pack(pady=20)
root.mainloop()
- 라벨을 하나 만들고, 버튼을 클릭하면 라벨의 글자가 "버튼이 눌렸습니다!"로 바뀌도록 하세요. 힌트: label.config(text="새로운 내용")
정답 :
import tkinter as tk
def toggle_color():
current_color = label.cget("fg") # 현재 글자 색 확인
if current_color == "red":
label.config(fg="blue")
else:
label.config(fg="red")
root = tk.Tk()
root.title("과제 3")
root.geometry("300x200")
# Label 생성 (처음은 빨간색)
label = tk.Label(root, text="색깔 바꾸기!", font=("Arial", 20), fg="red")
label.pack(pady=20)
# 버튼
button = tk.Button(root, text="색 변경", command=toggle_color)
button.pack()
root.mainloop()
- 버튼을 누르면 현재의 시간을 라벨에 출력되도록 만드세요. 힌트: 현재 시간 을 얻는 방법 import time current_time = time.strftime("%H:%M:%S")
정답 :
import tkinter as tk
import time
def update_time():
current_time = time.strftime("%H:%M:%S") # 현재 시간 문자열
label.config(text=current_time)
root = tk.Tk()
root.title("과제 4")
root.geometry("300x200")
# Label 생성
label = tk.Label(root, text="", font=("Arial", 30))
label.pack(expand=True)
# 버튼
button = tk.Button(root, text="시간 변경", font=("Arial", 30), command=update_time)
button.pack(expand=True)
# 시간 갱신 시작
update_time()
root.mainloop()
- 윈도우를 만들고, 중앙에 "클릭하여 텍스트 변경"이라고 적힌 ttk.Label을 만든다. 라벨 아래에 "텍스트 바꾸기"라는 버튼을 만든다. 버튼을 클릭하면 레이블의 텍스트가 "텍스트가 변경되었습니다."로 바뀌도록 만든다.
정답 :
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("텍스트 변경기")
root.geometry("300x150") # 윈도우 크기 설정 (너비x높이)
root.resizable(False, False) # 윈도우 크기 변경 불가
# Label 위젯 생성
# textvariable 대신 text 옵션을 사용하여 초기 텍스트 설정
my_label = ttk.Label(root, text="클릭하여 텍스트 변경", font=("Malgun Gothic", 14))
my_label.pack(pady=20) # 상하 여백 설정
# 텍스트를 변경하는 함수 정의
def change_label_text():
# Label의 text 옵션을 'config' 메서드를 사용하여 변경
my_label.config(text="텍스트가 변경되었습니다!")
# 버튼 위젯 생성
my_button = ttk.Button(root, text="텍스트 바꾸기", command=change_label_text)
my_button.pack(pady=10) # 상하 여백 설정
root.mainloop()
- 윈도우를 만들고, 중앙에 초기값이 "카운트 : 0"인 ttk.Label을 만든다. (힌트 : tk.StringVar를 사용) 레이블아래에 "증가" 버튼을 만든다. 버튼을 클릭할 때마다 레이블에 표시된 숫자가 1씩 증가하도록 만들어라.
정답 :
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("카운터")
root.geometry("250x150")
root.resizable(False, False)
count = tk.IntVar(value=0) # 초기값 0으로 설정
counter_label = ttk.Label(root,textvariable=count,font=("Malgun Gothic", 20, "bold"))
counter_label.pack(pady=20)
def increment_count():
current_count = count.get()
count.set(current_count + 1)
increment_button = ttk.Button(root, text="증가", command=increment_count)
increment_button.pack(pady=10)
root.mainloop()
- 윈도우를 만들고, 중앙에 "색상을 바꿔보세요!"라고 적힌 ttk.Label을 만드세요. Label 아래에 "빨강", "파랑", "초록" 세 개의 ttk.Button을 만드세요. 각 버튼을 클릭하면 Label의 글자 색상(foreground)이 해당 색상으로 바뀌도록 만드세요. (예: "빨강" 버튼 클릭 시 글자색이 빨간색으로)
정답 :
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("색상 변경기")
root.geometry("350x200")
root.resizable(False, False)
# Label 위젯 생성
color_label = ttk.Label(root, text="색상을 바꿔보세요!", font=("Malgun Gothic", 18, "bold"))
color_label.pack(pady=20)
# 색상을 변경하는 함수
def set_label_color(color):
color_label.config(foreground=color)
button_frame = ttk.Frame(root)
button_frame.pack(pady=10)
red_button = ttk.Button(
button_frame,
text="빨강",
command=lambda: set_label_color("red")
)
red_button.pack(side=tk.LEFT, padx=5)
# 파랑 버튼
blue_button = ttk.Button(
button_frame,
text="파랑",
command=lambda: set_label_color("blue")
)
blue_button.pack(side=tk.LEFT, padx=5)
# 초록 버튼
green_button = ttk.Button(
button_frame,
text="초록",
command=lambda: set_label_color("green")
)
green_button.pack(side=tk.LEFT, padx=5)
root.mainloop()
- 윈도우를 만들고, 중앙에 ttk.Label 하나만 배치하세요. 이 Label에 다음 예시처럼 두 줄 이상의 텍스트를 표시해 보세요. \n (개행 문자)을 이용하여 Label에 여러 줄의 텍스트를 나타낼 수 있습니다.
정답 :
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.title("두 줄 Label")
root.geometry("400x180")
root.resizable(False, False)
multi_line_text = "이것은 첫 번째 줄입니다.\n"
"이것은 두 번째 줄입니다.\n"
"ttk.Label은 여러 줄도 잘 표시합니다!\n"
"마지막 줄입니다. 참 쉽죠?"
)
multi_line_label = ttk.Label(
root,
text=multi_line_text,
font=("Malgun Gothic", 15),
justify=tk.CENTER
)
multi_line_label.pack(pady=30, padx=20)
root.mainloop()
로그인 하면 댓글을 쓸 수 있습니다.