Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Tkinter Canvas 항목에 이벤트를 바인딩하는 방법

Tkinter에서는 위젯에 이벤트를 바인딩하여 사용자 입력에 따라 다양한 작업을 수행할 수 있습니다. 일반 위젯뿐만 아니라 Canvas(캔버스) 항목에도 이벤트 핸들러를 연결할 수 있으며, 이때 bind(<Button>, callback) 메서드를 사용합니다. 캔버스 항목에 이벤트를 바인딩하면 정적인 도형이 동적으로 반응하도록 만들 수 있고, 이벤트 핸들러를 통해 자유롭게 커스터마이징할 수 있습니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
import random

# Tkinter 프레임 인스턴스 생성
win = Tk()

# 윈도우 크기 설정
win.geometry('700x350')

# 캔버스 생성
canvas = Canvas(win, width=700, height=350, bg='white')
canvas.pack()

def draw_shapes(e):
    # 기존 도형을 모두 지운 후 새 도형을 그림
    canvas.delete(ALL)
    canvas.create_oval(random.randint(5, 300), random.randint(1, 300), 25, 25, fill='OrangeRed2')

# 스페이스바 키를 함수에 바인딩
win.bind('<space>', draw_shapes)
win.mainloop()

실행 결과

위 코드를 실행하면 흰색 배경의 캔버스가 포함된 창이 화면에 표시됩니다.

Tkinter Canvas 항목에 이벤트를 바인딩하는 방법

이 상태에서 <Space> 키를 누를 때마다 캔버스 위에 무작위 위치의 도형이 새로 생성됩니다.

Tkinter Canvas 항목에 이벤트를 바인딩하는 방법

코드 설명

  • canvas.delete(ALL) : 캔버스에 그려져 있는 모든 항목을 삭제합니다.
  • canvas.create_oval() : 지정한 좌표에 타원을 그립니다. random.randint()를 활용해 키를 누를 때마다 서로 다른 위치에 도형이 나타나도록 구현했습니다.
  • win.bind('<space>', draw_shapes) : 스페이스바 입력 이벤트를 draw_shapes 함수와 연결합니다. 키가 눌릴 때마다 해당 함수가 호출됩니다.

참고로 캔버스 전체가 아닌 특정 캔버스 항목에만 이벤트를 바인딩하려면 tag_bind() 메서드를 사용하면 됩니다. 예를 들어 canvas.tag_bind(item_id, '<Button-1>', callback) 형태로 작성하면, 해당 항목을 마우스 왼쪽 버튼으로 클릭했을 때만 콜백 함수가 실행됩니다.