윈도우 프로그램 기본 위젯

강의노트 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()
  1. 레이블을 생성하고 첫번째 텍스트 "텍스트로 정보 전달"을 써넣는다.
  2. 두번째 레이블을 생성하고 두번째 텍스트 "파이썬을 정복하자!!!"의 폰트를 arial, 크기는 30으로 잡고 글자 색은 파란색으로 한다.
  3. 작성된 레이블을 윈두우에 붙인다.

레이블에 이미지 표시하기 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()

  1. 특정 디렉터리에 있는 이미지를 불러온다.
  2. 이미지를 포토이미지로 바꿔준다.
  3. 레이블에 이미지를 넣는다.

레이블에 이미지 표시하기 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()

  1. 이미지를 읽기 위한 라이브러리를 불러온다. PIL에서 Image와 ImagTk를 불러온다.
  2. 이미지를 읽어온다. 이때 이미지('clova_1.png')는 프로그램과 같은 디랙토리에 있어야 한다.
  3. 읽어온 이미지를 포토이미지로 만든다.
  4. 포토이미지를 레이블에 연결한다.
  5. 레이블의 위치를 x축 왼쪽으로부터 10픽셀, y축 위에서 부터 10픽셀 떨어진 위치에 고정한다.

연습문제

  1. 창에 "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()
  1. 창에 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()
  1. 라벨을 하나 만들고, 버튼을 클릭하면 라벨의 글자가 "버튼이 눌렸습니다!"로 바뀌도록 하세요. 힌트: 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()
  1. 버튼을 누르면 현재의 시간을 라벨에 출력되도록 만드세요. 힌트: 현재 시간 을 얻는 방법 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()
  1. 윈도우를 만들고, 중앙에 "클릭하여 텍스트 변경"이라고 적힌 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()
  1. 윈도우를 만들고, 중앙에 초기값이 "카운트 : 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()
  1. 윈도우를 만들고, 중앙에 "색상을 바꿔보세요!"라고 적힌 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()
  1. 윈도우를 만들고, 중앙에 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()
이전 글
다음 글
댓글
댓글로 소통하세요.