캔버스(Canvas) 위젯 - 사각형 그리기 |
캔버스(Canvas) 위젯
- 캔버스 위젯은 선, 타원, 다각형 및 직사각형과 같은 도형을그리는 데 사용됩니다.

▶ 캔버스에 사각형 그리기1

[ 캔버스에 사각형 그리기 예제1 ]

[ 캔버스에 사각형 그리기 예제1 소스 코드 ]
from tkinter import*
win=Tk()
win.title("캔버스에 사각형 그리기")
win.geometry("700x400")
win.resizable(True, True)
canvas = Canvas(win, width=300, height=200, bg="light blue", bd=3)
canvas.pack(fill="both",expand=True)
canvas.create_rectangle(100,100, 300,300, fill="yellow")
canvas.create_text(200,200, text="직사각형1")
win.mainloop()
[ 캔버스에 사각형 그리기 예제2 ]

[ 캔버스에 사각형 그리기 예제2 소스 코드 ]
from tkinter import*
win=Tk()
win.title("캔버스에 사각형 그리기")
win.geometry("700x400")
win.resizable(True, True)
canvas = Canvas(win, width=300, height=200, bg="light blue", bd=3)
canvas.pack(fill="both",expand=True)
canvas.create_rectangle(100,100, 300,300, fill="green")
canvas.create_text(200,200, text="직사각형1")
canvas.create_rectangle(350,50, 400,350, fill="blue")
canvas.create_text(380,200, text="직사각형2")
canvas.create_rectangle(450,100, 650,200, fill="red")
canvas.create_text(550,150, text="직사각형3")
canvas.create_rectangle(450,220, 650,250, fill="yellow")
canvas.create_text(550,240, text="직사각형4")
canvas.create_rectangle(550,300, 600,350, fill="pink")
canvas.create_text(570,320, text="직사각형5")
win.mainloop()
[ 캔버스에 사각형 그리기 예제3 ]
- 그리기 버튼을 누르면 도형이 그려지고 삭제 버튼을 누르면 도형이 지워지게 해보세요.

[ 캔버스에 사각형 그리기 예제3 소스 코드 ]
from tkinter import*
win=Tk()
win.title("캔버스에 사각형 그리기")
win.geometry("700x500")
#win.resizable(True, True)
def del1():
canvas.delete(a)
canvas.delete(a1)
def del2():
canvas.delete(b)
canvas.delete(b1)
def del3():
canvas.delete(c)
canvas.delete(c1)
def delall():
canvas.delete(a)
canvas.delete(a1)
canvas.delete(b)
canvas.delete(b1)
canvas.delete(c)
canvas.delete(c1)
def create1():
global a, a1
a = canvas.create_rectangle(100,100, 300,300, fill="green")
a1=canvas.create_text(200,200, text="직사각형1")
def create2():
global b, b1
b=canvas.create_rectangle(350,50, 400,350, fill="blue")
b1=canvas.create_text(380,200, text="직사각형2")
def create3():
global c, c1
c=canvas.create_rectangle(450,100, 650,200, fill="red")
c1= canvas.create_text(550,150, text="직사각형3")
def createall():
global a,a1,b,b1,c, c1
a = canvas.create_rectangle(100,100, 300,300, fill="green")
a1=canvas.create_text(200,200, text="직사각형1")
b=canvas.create_rectangle(350,50, 400,350, fill="blue")
b1=canvas.create_text(380,200, text="직사각형2")
c=canvas.create_rectangle(450,100, 650,200, fill="red")
c1= canvas.create_text(550,150, text="직사각형3")
t_frame=Frame(win)
t_frame.pack(side="top", fill="both", expand=True)
b_frame=Frame(win)
b_frame.pack(side="bottom", fill="both", expand=True)
canvas = Canvas(t_frame, width=700, height=350, bg="light blue", bd=3)
canvas.pack()
bu11 = Button(b_frame, text="도형1그리기", command = create1)
bu11.grid(row=0, column=0)
bu22 = Button(b_frame, text="도형2그리기", command = create2)
bu22.grid(row=0, column=1)
bu33 = Button(b_frame, text="도형3그리기", command = create3)
bu33.grid(row=0, column=2)
bu44 = Button(b_frame, text="모두 그리기", command = createall)
bu44.grid(row=0, column=3)
bu1 = Button(b_frame, text="도형1삭제", command = del1)
bu1.grid(row=1, column=0)
bu2 = Button(b_frame, text="도형2삭제", command = del2)
bu2.grid(row=1, column=1)
bu3 = Button(b_frame, text="도형3삭제", command = del3)
bu3.grid(row=1, column=2)
bu6 = Button(b_frame, text="모두 삭제", command = delall)
bu6.grid(row=1, column=3)
win.mainloop()
[ 캔버스에 사각형 그리기 예제4 ]

[ 캔버스에 사각형 그리기 예제4 소스 코드 ]
from tkinter import*
import time
win=Tk()
win.title("캔버스에 사각형 그리기")
win.geometry("400x400")
win.resizable(True, True)
canvas = Canvas(win, width=300, height=200, bg="light blue", bd=3)
canvas.pack(fill="both",expand=True)
x=170
y=230
for i in range(10):
canvas.create_rectangle(x,x, y,y)
win.update()
time.sleep(1)
x=x-10
y=y+10
win.mainloop()
[ 캔버스에 사각형 그리기 예제5 ] - 파이썬 움직이는 사각형
- 사각형으로 오른쪽 방향으로 움직이게 해보세요.
- canvas.move() 함수를 사용합니다.
※ 첫번째 매개변수는 움직이고자 하는 객체의 변수입니다.
※ 두번째 매개 변수는 x방향으로 이동거리입니다.
※ 세 번째 매개변수는 y방향으로 이동거리입니다.

from tkinter import*
import time
win=Tk()
win.title("캔버스에 사각형 움직이기")
win.geometry("700x200")
win.resizable(True, True)
canvas = Canvas(win, width=300, height=200, bg="light blue", bd=3)
canvas.pack(fill="both",expand=True)
canvas.create_text(350, 30, text="사각형이 → 방향으로 움직입니다")
a = canvas.create_rectangle(100,100, 150,150, fill="green")
for i in range(100):
canvas.move(a, 3, 0)
win.update()
time.sleep(0.5)
win.mainloop()
[ 캔버스에 사각형 그리기 예제6 ] - 파이썬 방향키로 움직이는 사각형
- 방향키로 사각형을 움직이게 해보세요.
- 키를 누르거나 마우스가 움직이는 것을 이벤트(event)가 발생했다고 합니다.
- 이벤트를 처리하는 가장 일반적인 방법은 이벤트에 함수를 연결하는 것입니다.
- 이벤트가 발생하게 되면 함수가 자동으로 호출됩니다.
- 이벤트가 발생했을 때 이 함수가 호출되도록 하려면 bind_all() 함수를 사용합니다.
- bind_all() 함수의 첫 번째 매개 변수는 tkinter가 처리해야하는 이벤트를 지정합니다.
- <KeyPress-Right>는 오른쪽 화살표가 눌리는 이벤트를 나태냅니다. 이 이벤트가 발생하면 tkinter는 move_right()함수를 호출합니다.

from tkinter import*
import time
win=Tk()
win.title("캔버스에 방향키로 사각형 움직이기")
win.geometry("500x500")
win.resizable(True, True)
canvas = Canvas(win, width=300, height=200, bg="light green", bd=3)
canvas.pack(fill="both",expand=True)
a = canvas.create_rectangle(100,100, 150,150, fill="green")
def move_right(event):
canvas.move(a, 5, 0)
def move_left(event):
canvas.move(a, -5, 0)
def move_up(event):
canvas.move(a, 0, -5)
def move_down(event):
canvas.move(a, 0, 5)
canvas.bind_all('<KeyPress-Right>', move_right)
canvas.bind_all('<KeyPress-Left>', move_left)
canvas.bind_all('<KeyPress-Up>', move_up)
canvas.bind_all('<KeyPress-Down>', move_down)
win.mainloop()
'파이썬 GUI' 카테고리의 다른 글
13. 파이썬 위젯 - 마우스로 그림 그리기 (0) | 2020.12.18 |
---|---|
12. 파이선 위젯 - 캔버스(원그리기) (0) | 2020.12.18 |
10. 파이썬 위젯 - 캔버스(선그리기) (0) | 2020.12.15 |
9. 파이썬 위젯 - 리스트박스 (0) | 2020.12.15 |
8. 파이썬 위젯 - 프레임 (0) | 2020.12.14 |