Tkinter 애플리케이션을 개발하다 보면 프레임(Frame) 안에 이미지를 삽입해야 하는 경우가 자주 있습니다. 이 글에서는 Pillow(PIL) 라이브러리를 활용해 Tkinter 프레임에 이미지를 손쉽게 배치하는 방법을 단계별로 알아보겠습니다.
구현 단계
필요한 라이브러리를 임포트하고 tkinter 윈도우(프레임)의 인스턴스를 생성합니다. 이미지를 불러와 프레임 안에 표시하기 위해 Pillow(PIL) 라이브러리를 사용합니다.
geometry() 메서드를 사용해 윈도우의 크기를 지정합니다.
프레임을 생성하고 가로·세로 크기를 설정한 뒤, place() 메서드에 anchor='center' 옵션을 적용하여 프레임을 창의 정중앙에 배치합니다.
ImageTk.PhotoImage(Image.open("image")) 구문을 사용해 이미지 파일을 열고 Tkinter에서 사용할 수 있는 형태로 변환합니다.
프레임 내부에 Label 위젯을 생성하고, 해당 레이블에 이미지 객체를 전달합니다.
마지막으로 mainloop()를 호출하여 애플리케이션 창을 실행합니다.
예제 코드
# 필요한 라이브러리 임포트
from tkinter import *
from PIL import ImageTk, Image
# tkinter 윈도우 인스턴스 생성
win = Tk()
# 윈도우 크기 정의
win.geometry("700x500")
frame = Frame(win, width=600, height=400)
frame.pack()
frame.place(anchor='center', relx=0.5, rely=0.5)
# tkinter ImageTk 객체 생성
img = ImageTk.PhotoImage(Image.open("forest.jpg"))
# 텍스트 또는 이미지를 표시할 Label 위젯 생성
label = Label(frame, image = img)
label.pack()
win.mainloop()실행 결과
위 코드를 실행하면 700x500 크기의 윈도우가 열리고, 창의 정중앙에 프레임이 배치된 후 그 안에 지정한 이미지(forest.jpg)가 표시됩니다.

핵심 포인트 정리
- Tkinter는 기본적으로 PNG, GIF 형식만 지원하므로 JPG 등 다른 형식의 이미지를 사용하려면 Pillow 라이브러리가 반드시 필요합니다.
- relx=0.5, rely=0.5와 anchor='center' 조합은 요소를 부모 컨테이너의 정중앙에 배치하는 가장 간편한 방법입니다.
- 이미지 객체는 전역 변수 또는 참조가 유지되는 변수에 저장해야 합니다. 그렇지 않으면 가비지 컬렉션에 의해 이미지가 사라질 수 있습니다.