반응형
캔버스(Canvas) 위젯 - 사각형 그리기

캔버스(Canvas) 위젯

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

파이썬 캔버스(Canvas) 메서드(Method)

 

▶ 캔버스에 사각형 그리기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()
반응형
Posted by 명문코딩컴퓨터
,