PythonのTkinter Canvasでボールをアニメーション表示する方法
Tkinterは、PythonでGUIアプリケーションを作成するための標準ライブラリです。Canvasウィジェットを利用すると、画像の追加や図形の描画はもちろん、オブジェクトのアニメーションも簡単に実装できます。ここでは、Canvas上でボールが壁に当たると跳ね返りながら動き続けるシンプルなアプリケーションの作成方法を紹介します。
アプリケーションの構成要素
ウィンドウ内にボール(楕円)を描画するためのCanvasウィジェット。
ボールを動かすための関数move_ball()。この関数内では、ボールがキャンバスの端(左・右・上・下)に接触した際に位置情報を更新し、進行方向を反転させる処理を行います。
ボールの位置を定期的に更新するために使用するcanvas.after(duration, function())。指定した時間間隔ごとに関数を呼び出すことで、滑らかなアニメーションを実現します。
最後にコードを実行してアプリケーションを起動します。
サンプルコード
# 必要なライブラリをインポート
from tkinter import *
# tkinterフレーム(ウィンドウ)のインスタンスを作成
win=Tk()
# ウィンドウサイズを設定
win.geometry("700x350")
# ウィンドウサイズを固定
win.resizable(False,False)
# Canvasウィジェットを作成
canvas=Canvas(win, width=700, height=350)
canvas.pack()
# Canvas上にボール(楕円)を作成
ball=canvas.create_oval(10,10,50,50, fill="green3")
# ボールの移動速度を設定
xspeed=yspeed=3
def move_ball():
global xspeed, yspeed
# ボールを移動させる
canvas.move(ball, xspeed, yspeed)
# 現在のボールの座標を取得
(leftpos, toppos, rightpos, bottompos)=canvas.coords(ball)
# 左右の壁に当たったらX方向の速度を反転
if leftpos <=0 or rightpos>=700:
xspeed=-xspeed
# 上下の壁に当たったらY方向の速度を反転
if toppos <=0 or bottompos >=350:
yspeed=-yspeed
# 30ミリ秒後に再度move_ball()を呼び出す
canvas.after(30,move_ball)
canvas.after(30, move_ball)
win.mainloop()コードのポイント解説
canvas.create_oval():指定した座標(左上と右下)をもとに楕円形を描画します。fillオプションで塗りつぶし色を指定できます。
canvas.move():第1引数にオブジェクトID、第2・第3引数にX方向・Y方向の移動量を渡して図形を移動させます。
canvas.coords():オブジェクトの現在の座標(左・上・右・下)をタプルとして取得でき、壁との衝突判定に利用しています。
canvas.after():指定したミリ秒後に関数を再帰的に呼び出すことで、アニメーションを継続的に実行します。
実行結果
上記のコードを実行すると、700×350ピクセルのウィンドウが表示され、その中で緑色のボールがキャンバスの壁に跳ね返りながら動き続けます。速度を変更したい場合は、変数xspeedとyspeedの値を調整してください。数値を大きくするとボールの移動が速くなります。
-
TkinterのCanvas(キャンバス)をクリアする方法を解説
Tkinterでは、ウィンドウ内にキャンバス(Canvas)を追加できます。キャンバスを作成すると、メモリ内部に描画データのためのストレージが確保されます。そのため、不要になったキャンバスの内容は、適切にクリアまたは削除してあげる必要があります。キャンバスをクリアするには、delete()メソッドを使用します。引数に「all」を指定することで、Tkinterフレーム上に存在するすべてのキャンバスアイテムを一括で削除し、画面をまっさらな状態に戻すことができます。サンプルコード# tkinterライブラリをインポート from tkinter import * # tkinterフレームのインス
-
Python Tkinterでキャンバス上の画像を中央に配置する方法
Tkinterを使ってGUIアプリケーションを開発している際、Tkinterのキャンバス(Canvas)上に画像を読み込みたいケースはよくあります。本記事では、その画像をキャンバスの中央に配置する方法を解説します。anchorパラメータとはデフォルトでは、キャンバスは画像を自身の幅と高さに従って配置します。しかし、anchor(アンカー)パラメータに方向の値を渡すことで、画像の位置を任意の方向(N:北、S:南、E:東、W:西、NS、EWなど)に操作できます。アンカーは画像関数と一緒に呼び出されるパラメータで、キャンバス内における画像の方向や位置を定義します。このanchorパラメータを活用すれ