파이썬/파이썬(python) 중급

[28-2 파이썬] tkinter Canvas widget, 캔버스 위젯

Olivia-BlackCherry 2022. 9. 17. 10:43

미술을 할 때 기본 바탕이 되는 것은 종이도 있지만, 많은 작가들이 캔버스를 주 재료로 쓴다. 

천으로 만들어졌기 때문에 물감을 겹겹이 덧칠해도 무리가 없기 때문이다. 

 

Canvas widget은 정말 Canvas와 똑같다. 

여러 레이어를 겹겹이 쌓아도 아무런 문제가 없다.

이미지에 하나를 그리고, 그 위에 또 하나를 그리고 또 그려도 괜찮다는 거다. 

그런 원리를 바탕으로 캔버스 위젯을 사용해보자.

 

 

기본환경 설정

from tkinter import *

window = Tk()
window.title("bts")

window.mainloop()

 

 

canvas 객체 생성

파라미터로 width 폭, height 높이가 오며 

픽셀 단위의 값이 된다.

canvas = Canvas(width=371, height=371)

 

 

PhotoImage(file = ?)

이미지 불러오기

bts_img = PhotoImage(file="bts.png")

 

 

create_image()

이미지 추가하기

canvas.create_image(185, 185, image=bts_img)

 

 

pack()

이미지 배치하기

canvas.pack()

 

 

subsample()

이미지 사이즈를 줄인다.

파라미터로 x,y 정수가 오는데

1/x,1/y배 만큼 줄인다.

smaller_image = bts_img.subsample(10, 10)

 

 

zoom()

이미지 사이즈를 늘린다. 

파라미터로 x, y 정수가 오는데

x, y배 만큼 늘린다.

 

 

config(padx=?, pady=?) 

윈도우 여백주기

window.config(padx=100, pady=50)

 

 

잘린 부분 없도록, canvas 크기와 create_image 크기 조절하기

from tkinter import *

window = Tk()
window.title("bts")
window.config(padx=100, pady=50)

canvas = Canvas(width=380, height=380)
bts_img = PhotoImage(file="bts.png")
canvas.create_image(190, 190, image=bts_img)
canvas.pack()


window.mainloop()

 

 

create_text(x=?, y=?, text=?, fill=?, font=?)

캔버스 위에 글씨를 쓴다.

x, y: 위치

fill: 색깔

font: 글씨체, 글씨크기, 글씨효과

canvas.create_text(190,60, text="00:00", fill = "purple", font =("Courier", 40, "bold"))

 

bg 키워드 인자

배경색깔을 준다.

config의 파라미터 bg 키워드인자를 활용한다. 

(색깔의 헥스코드를 가져오는 방법을 알고싶다면----> 클릭)

PINK = "#EBC7E8"
window.config(padx=100, pady=50, bg=PINK)

 

사진 속 배경도 바꾸고 싶다면,

canvas의 bg 키워드 인자를 이용한다.

 

 

 

<최종코드>

PINK = "#EBC7E8"

from tkinter import *

window = Tk()
window.title("bts")
window.config(padx=100, pady=50)

canvas = Canvas(width=380, height=380)

bts_img = PhotoImage(file="bts.png")
# larger_image = bts_img.zoom(2,2)
# smaller_image = bts_img.subsample(10, 10)

canvas.create_image(190, 190, image=bts_img, bg = PINK)
canvas.create_text(190,60, text="00:00", fill = "purple", font =("Courier", 40, "bold"))

canvas.pack()