TkinterでCanvasアイテムにイベントをバインドする方法を解説
Tkinterでは、ウィジェットにイベントをバインド(紐付け)することで、キー入力やマウス操作などに応じた一連の処理を実行できます。さらに、bind(<Button>, callback)メソッドを使うことで、Canvasアイテムにもイベントハンドラをバインドすることが可能です。イベントをバインドされたCanvasアイテムは動的な要素となり、イベントハンドラを通じて自由にカスタマイズできるようになります。
コード例
# 必要なライブラリをインポート
from tkinter import *
import random
# Tkinterフレームのインスタンスを作成
win = Tk()
# ウィンドウのサイズを設定
win.geometry("700x350")
# キャンバスを作成
canvas = Canvas(win, width=700, height=350, bg='white')
def draw_shapes(e):
canvas.delete(ALL)
canvas.create_oval(random.randint(5, 300), random.randint(1, 300), 25, 25, fill='OrangeRed2')
canvas.pack()
# スペースキーに関数をバインド
win.bind("<space>", draw_shapes)
win.mainloop()
実行結果
上記のコードを実行すると、Canvasが配置されたウィンドウが表示されます。
<Space>キーを押すたびに、Canvasウィンドウ内のランダムな位置に楕円の図形が描画されます。canvas.delete(ALL)によって既存の図形は毎回消去されるため、常に最新の図形だけが表示される仕組みです。
補足:tag_bindによるCanvasアイテムへの直接バインド
個々のCanvasアイテム(図形など)に対して直接イベントをバインドしたい場合は、tag_bindメソッドを使用します。create_ovalなどの描画メソッドが返すアイテムIDを指定することで、次のようにイベントを紐付けることができます。
item_id = canvas.create_oval(50, 50, 100, 100, fill='OrangeRed2') canvas.tag_bind(item_id, "<Button-1>", on_click)
このようにすることで、「特定の図形がクリックされたときだけ処理を実行する」といった、よりきめ細かいインタラクティブな操作が実現できます。
-
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パラメータを活用すれ