Language/Python

[ Python ] tkinter MyPaint 프로그램

곽수진 2021. 9. 14. 14:58
반응형
마우스로 윈도우의 그림판처럼 그림을 그리는 프로그램을 작성해보자.

 

from tkinter import*

def paint(event):
    x1, y1 = (event.x-1), (event.y+1)
    x2, y2 = (event.x-1), (event.y+1)
    canvas.create_oval(x1, y1, x2, y2)

window = Tk()
canvas = Canvas(window)
canvas.pack()
canvas.bind("<B1-Motion>", paint)
window.mainloop()

 

결과값 출력 모습

 

▶ 이벤트 핸들러는 event라는 하나의 매개변수를 가짐

→ event는 Tkinter Event Object로서 여러개의 속성을 가짐

→ event.x와 even.y는 위젯의 좌상단에서의 상대적 마우스 위치를 의미

→ 캔버스 위젯에서 (x1, y1)과 (x2, y2)로 정의되는 사각형 안에 그려짐

→ 각각 찍힌 작은 원들이 점처럼 모여 선으로 그려짐

def paint(event):
    x1, y1 = (event.x-1), (event.y+1)
    x2, y2 = (event.x-1), (event.y+1)
    canvas.create_oval(x1, y1, x2, y2)

canvas = Canvas(window) : tkinter에서 그림을 그리기 위해서는 Canvas 위젯이 필요함

canvas.pack() : 생성한 canvas를 압축 배치 관리 방식으로 배치

canvas.bind("<B1-Motion>", paint) : 마우스를 드래그해 움직일 때마다 마우스 이벤트를 처리

→ 마우스 왼쪽 버튼 클릭 : <Button-1>

→ 마우스 중간 버튼 클릭 : <Button-2>

→ 마우스 오른쪽 버튼 클릭 : <Button-3>

bind() : 이벤트와 이벤트가 발생했을 때 수행하는 함수(핸들러)를 연결시키는 역할

→ 왼쪽 버튼을 누른 상태에서 캔버스에서 발생하는 <B1-Motion> 이벤트를 paint() 함수와 연결

반응형