矢印キーでTkinterキャンバス上の画像を移動させる方法
TkinterのCanvas(キャンバス)ウィジェットは、Tkinterライブラリの中でも特に汎用性の高いウィジェットの一つです。図形や画像の描画はもちろん、オブジェクトのアニメーション表現にも活用できます。
Canvas上に配置した画像を動かしたい場合は、move()メソッドを使用します。このメソッドに「対象の画像」と「移動量(x, y)」を引数として渡すことで、画像を任意の方向へ移動させることができます。また、Canvas内での画像の位置を正しく追跡できるよう、画像オブジェクトはグローバル変数として宣言しておくのがポイントです。
実装の流れ
以下の手順に従うことで、矢印キー操作による画像の移動機能を実装できます。
- まず、Canvasウィジェットを定義し、表示する画像を追加します。
- Canvas内で画像を動かすためのmove()処理を行う関数を、上下左右の4方向分それぞれ定義します。
- bind()メソッドを使い、矢印キーのキーイベントと各移動関数をバインド(関連付け)します。
サンプルコード
# 必要なライブラリをインポート
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)
# Canvasに画像を追加
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ピクセルずつ移動します。

このように、bind()メソッドでキーイベントと関数を紐付けるだけで、ゲームのような直感的な操作性を簡単に実現できます。移動量の数値を変更すれば、1回あたりの移動距離も自由に調整可能です。ぜひ自分のプロジェクトに応用してみてください。
-
Tkinterで画像をボタンとして使う方法をわかりやすく解説
Tkinterでは、画像ファイルをそのままボタンとして表示することができます。この記事では、角丸の画像ボタンを作成する方法を、実際のコード例とともに解説します。ここで紹介する手法は、フォーム、ゲーム、ダイアログボックスなど、さまざまなアプリケーションに応用できる汎用的なテクニックです。 画像ボタンの作り方の基本 Tkinterで見栄えの良い角丸ボタンを作る最も簡単な方法は、あらかじめ用意したボタン用の画像を、クリック可能なウィジェットとして配置することです。これを実現するのがPhotoImage()関数で、指定した画像ファイルを読み込んでボタンに渡すことができます。 具体的には、以下の手順で画
-
Python Tkinterでキャンバス上の画像を中央に配置する方法
Tkinterを使ってGUIアプリケーションを開発している際、Tkinterのキャンバス(Canvas)上に画像を読み込みたいケースはよくあります。本記事では、その画像をキャンバスの中央に配置する方法を解説します。anchorパラメータとはデフォルトでは、キャンバスは画像を自身の幅と高さに従って配置します。しかし、anchor(アンカー)パラメータに方向の値を渡すことで、画像の位置を任意の方向(N:北、S:南、E:東、W:西、NS、EWなど)に操作できます。アンカーは画像関数と一緒に呼び出されるパラメータで、キャンバス内における画像の方向や位置を定義します。このanchorパラメータを活用すれ