Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter에서 배경 이미지를 창 크기에 맞게 동적으로 조정하는 방법

파이썬에서 이미지 파일을 불러오고 다양한 작업을 수행하려면 Pillow(PIL) 라이브러리가 필요합니다. Pillow는 애플리케이션이 이미지를 가져와서 크기 조정, 회전, 필터 적용 등 여러 가지 연산을 처리할 수 있게 해주는 대표적인 이미지 처리 패키지입니다.

이 글에서는 Tkinter 창의 크기가 변할 때 배경 이미지도 함께 동적으로 조정되도록 만드는 방법을 살펴보겠습니다. 전체 구현 과정은 다음과 같습니다.

  • Tkinter 애플리케이션에서 이미지 파일을 엽니다.

  • Canvas 위젯을 생성하고 create_image(**options) 메서드를 사용해 캔버스 위에 이미지를 배치합니다.

  • 불러온 이미지의 크기를 조정하는 함수를 정의합니다.

  • 해당 함수를 부모(루트) 윈도우의 설정 이벤트에 바인딩하여, 창 크기가 변경될 때마다 자동으로 실행되도록 합니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from PIL import ImageTk, Image

# Tkinter 프레임 인스턴스 생성
win = Tk()

# Tkinter 프레임의 크기 설정
win.geometry("700x450")

# 이미지 파일 열기
bg = ImageTk.PhotoImage(file="tutorialspoint.png")

# 캔버스 생성
canvas = Canvas(win, width=700, height=3500)
canvas.pack(fill=BOTH, expand=True)

# 캔버스 안에 이미지 추가
canvas.create_image(0, 0, image=bg, anchor='nw')

# 창 크기에 맞춰 이미지를 조정하는 함수
def resize_image(e):
    global image, resized, image2
    # 크기를 조정할 이미지 열기
    image = Image.open("tutorialspoint.png")
    # 루트 윈도우의 너비와 높이에 맞춰 이미지 크기 조정
    resized = image.resize((e.width, e.height), Image.ANTIALIAS)

    image2 = ImageTk.PhotoImage(resized)
    canvas.create_image(0, 0, image=image2, anchor='nw')

# 부모 윈도우 설정 이벤트에 함수 바인딩
win.bind("", resize_image)
win.mainloop()


실행 결과

위 코드를 실행하면 이미지가 포함된 창이 나타납니다. 창의 크기를 마우스로 늘리거나 줄이면 배경 이미지가 창 크기에 맞춰 실시간으로 함께 조절되는 것을 확인할 수 있습니다.

Tkinter에서 배경 이미지를 창 크기에 맞게 동적으로 조정하는 방법

참고 사항

Pillow 10 버전부터는 Image.ANTIALIAS 상수가 제거되었습니다. 최신 버전의 Pillow를 사용한다면 리샘플링 옵션을 Image.LANCZOS 또는 Image.Resampling.LANCZOS로 변경해야 정상적으로 동작합니다.