Python tkinter 강좌 : 제 22강 - PhotoImage
PhotoImage(이미지)
PhotoImage를 이용하여 위젯들의 공간에 이미지를 설정할 수 있습니다.
PhotoImage 사용
import tkinter
window=tkinter.Tk()
window.title("YUN DAE HEE")
window.geometry("640x400+100+100")
window.resizable(True, True)
image=tkinter.PhotoImage(file="a.png")
label=tkinter.Label(window, image=image)
label.pack()
window.mainloop()image=tkinter.PhotoImage(file="a.png")
label=tkinter.Label(window, image=image)
label.pack()tkinter.PhotoImage(file=경로)를 사용하여 위젯에 표시할 이미지의 경로를 설정할 수 있습니다.
이미지를 적용할 위젯의 image 매개변수에 사용합니다.
상대 경로의 기준은 스크립트 파일의 위치가 아니라, 스크립트를 실행한 현재 작업 디렉터리입니다.
-
Tip : 스크립트가 저장된 위치와 이미지의 위치가
동일하다면 이미지 파일의 이름만 입력 -
Tip : 실행 위치와 관계없이 스크립트 파일 기준으로 이미지를 찾으려면
os.path.join(os.path.dirname(__file__), "a.png")과 같이 경로를 만들어 사용합니다.
지원 이미지 형식
PhotoImage는 PNG, GIF, PPM, PGM 형식의 이미지를 지원합니다.
JPEG, BMP, WEBP 등의 형식은 지원하지 않으므로, 이러한 이미지를 사용하려면 Pillow 라이브러리의 PIL.ImageTk.PhotoImage를 사용합니다.
from PIL import Image, ImageTk
image=ImageTk.PhotoImage(Image.open("a.jpg"))
label=tkinter.Label(window, image=image)
label.pack()- Tip :
Pillow는pip install pillow로 설치할 수 있습니다.
이미지 참조 유지
def show_image():
image=tkinter.PhotoImage(file="a.png")
label=tkinter.Label(window, image=image)
label.image=image
label.pack()PhotoImage 객체는 참조가 사라지면 가비지 컬렉션에 의해 삭제되어, 위젯에 이미지가 표시되지 않고 빈 공간만 나타납니다.
예제와 같이 함수 안에서 이미지를 생성하는 경우, 함수가 종료되면 지역 변수 image가 사라지므로 label.image=image와 같이 위젯의 속성에 이미지를 저장하여 참조를 유지합니다.
- Tip : 이미지가 표시되지 않고 빈 위젯만 나타난다면, 오류가 발생하지 않더라도 참조 유지 문제를 가장 먼저 확인합니다.
PhotoImage Method
| 이름 | 의미 | 설명 |
|---|---|---|
| width() | 이미지 너비 반환 | 이미지의 너비(픽셀)를 반환 |
| height() | 이미지 높이 반환 | 이미지의 높이(픽셀)를 반환 |
| subsample(x, y) | 이미지 축소 | 가로 x배, 세로 y배 축소한 새로운 이미지 반환 예) subsample(2, 2) → 1/2 크기 |
| zoom(x, y) | 이미지 확대 | 가로 x배, 세로 y배 확대한 새로운 이미지 반환 예) zoom(2, 2) → 2배 크기 |
-
Tip :
subsample과zoom은 정수 배율만 사용할 수 있으므로, 임의의 크기로 조절하려면Pillow의Image.resize를 사용합니다. -
Tip :
Label외에도Button,Canvas(create_image)등의 위젯에 이미지를 적용할 수 있으며,compound매개변수를 사용하면 문자열과 이미지를 함께 표시할 수 있습니다.
댓글 남기기