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

Tkinter 캔버스에서 방향키로 이미지를 자유롭게 이동하는 방법

Tkinter의 Canvas(캔버스) 위젯은 Tkinter 라이브러리에서 가장 활용도가 높은 위젯 중 하나입니다. 다양한 도형, 이미지, 애니메이션 객체를 만들 때 사용할 수 있으며, move() 메서드를 활용하면 캔버스에 배치된 이미지를 동적으로 움직이는 기능을 손쉽게 구현할 수 있습니다.

move() 메서드의 동작 원리

move(이미지, x, y) 형태로 이미지와 이동할 좌표를 매개변수로 전달하면, 해당 이미지가 캔버스 안에서 지정한 만큼 이동합니다. 이때 캔버스 내에서 이미지의 위치를 계속 추적할 수 있도록 이미지 변수는 전역으로 선언하는 것이 좋습니다.

구현 순서

  • 먼저 Canvas 위젯을 정의하고 캔버스에 이미지를 추가합니다.

  • 캔버스 안에서 이미지가 동적으로 움직일 수 있도록 move() 관련 함수를 정의합니다.

  • 방향키(화살표 키)와 각 이동 함수를 바인딩하여 키 입력으로 이미지를 조작할 수 있게 합니다.

예제 코드

# 필요한 라이브러리 임포트
from tkinter import *
from PIL import Image, ImageTk

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

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

# Canvas 위젯 정의
canvas = Canvas(win, width=600, height=400, bg="white")
canvas.pack(pady=20)

# 캔버스에 이미지 추가
image = ImageTk.PhotoImage(Image.open('favicon.ico'))
img = canvas.create_image(250, 120, anchor=NW, image=image)

def left(e):
    x = -20
    y = 0
    canvas.move(img, x, y)

def right(e):
    x = 20
    y = 0
    canvas.move(img, x, y)

def up(e):
    x = 0
    y = -20
    canvas.move(img, x, y)

def down(e):
    x = 0
    y = 20
    canvas.move(img, x, y)

# 이동 함수를 방향키에 바인딩
win.bind("<Left>", left)
win.bind("<Right>", right)
win.bind("<Up>", up)
win.bind("<Down>", down)

win.mainloop()

실행 결과

위 코드를 실행하면 하나의 창이 나타나고, 그 안에 배치된 이미지를 방향키를 눌러 창 안에서 자유롭게 이동시킬 수 있습니다.

왼쪽, 오른쪽, 위, 아래 화살표 키를 누를 때마다 이미지가 해당 방향으로 20픽셀씩 부드럽게 움직이는 것을 확인할 수 있습니다. 이 원리를 응용하면 간단한 2D 게임 캐릭터 조작이나 대화형 그래픽 인터페이스도 쉽게 만들 수 있습니다.