How to Move an Image in Tkinter canvas with Arrow Keys?

Tkinter Canvas widget is one of the versatile widgets in the Tkinter library. It is used to create different shapes, images, and animating objects. We can provide a dynamic attribute to the image defined in a Canvas widget by using the move() method.

Define the image and the coordinates as a parameter in the move(image, x, y) method to move the Image in the Canvas. We declare images globally in order to track the Image location in the Canvas.

Steps to Move Image with Arrow Keys

We can follow these steps to make our image movable within the canvas:

  • First, define the Canvas widget and add images to it.

  • Define the movement functions to allow the image to be dynamic within the Canvas.

  • Bind the Arrow Keys with the functions that allow images to be moved within the Canvas.

Complete Example

Here's a complete example that demonstrates moving an image with arrow keys ?

# Import the required libraries
from tkinter import *
from PIL import Image, ImageTk

# Create an instance of tkinter frame
win = Tk()

# Set the size of the tkinter window
win.geometry("700x400")
win.title("Move Image with Arrow Keys")

# Define a Canvas widget
canvas = Canvas(win, width=600, height=350, bg="lightblue")
canvas.pack(pady=20)

# Create a simple colored rectangle as an image (since external image may not be available)
# For demonstration, we'll create a rectangle that acts as our movable object
rect = canvas.create_rectangle(250, 150, 300, 200, fill="red", outline="black", width=2)

# Movement distance
move_distance = 20

def left(event):
    canvas.move(rect, -move_distance, 0)

def right(event):
    canvas.move(rect, move_distance, 0)

def up(event):
    canvas.move(rect, 0, -move_distance)

def down(event):
    canvas.move(rect, 0, move_distance)

# Bind the arrow keys to movement functions
win.bind("<Left>", left)
win.bind("<Right>", right)
win.bind("<Up>", up)
win.bind("<Down>", down)

# Focus on the window to capture key events
win.focus_set()

# Add instructions
instruction_text = "Use Arrow Keys to move the red rectangle"
canvas.create_text(300, 50, text=instruction_text, font=("Arial", 12), fill="black")

win.mainloop()

Using an Actual Image File

If you want to move an actual image file, here's the modified version ?

# Import the required libraries
from tkinter import *
from PIL import Image, ImageTk

# Create an instance of tkinter frame
win = Tk()

# Set the size of the tkinter window
win.geometry("700x400")
win.title("Move Image with Arrow Keys")

# Define a Canvas widget
canvas = Canvas(win, width=600, height=350, bg="white")
canvas.pack(pady=20)

# Load and add image to Canvas widget
try:
    # Replace 'your_image.png' with your actual image file
    image = ImageTk.PhotoImage(Image.open('your_image.png'))
    img = canvas.create_image(250, 150, anchor=CENTER, image=image)
except:
    # If image not found, create a text object instead
    img = canvas.create_text(250, 150, text="IMAGE", font=("Arial", 20), fill="blue")

def left(event):
    canvas.move(img, -20, 0)

def right(event):
    canvas.move(img, 20, 0)

def up(event):
    canvas.move(img, 0, -20)

def down(event):
    canvas.move(img, 0, 20)

# Bind the arrow keys to movement functions
win.bind("<Left>", left)
win.bind("<Right>", right)
win.bind("<Up>", up)
win.bind("<Down>", down)

# Focus on the window to capture key events
win.focus_set()

win.mainloop()

Key Points

  • The canvas.move(object_id, dx, dy) method moves an object by the specified distance.

  • Use win.bind() to bind keyboard events to movement functions.

  • Call win.focus_set() to ensure the window can capture keyboard events.

  • Movement distance can be adjusted by changing the values in the movement functions.

Conclusion

Moving images in Tkinter canvas with arrow keys is achieved by binding keyboard events to movement functions that use canvas.move(). This creates interactive applications where users can control objects using keyboard input.

Updated on: 2026-03-25T23:25:01+05:30

5K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements