TkinterのCanvasで表示中の画像を更新する方法(itemconfigの使い方)
Pythonで画像を扱う際には、PIL(Pillow)パッケージが広く利用されています。画像の読み込みや加工はもちろん、データの可視化にも活用できます。アプリケーション内に画像を表示する場合、一般的にはCanvasウィジェットを使用します。Canvasウィジェットは画像や図形オブジェクトを自由に配置できる多機能なウィジェットであり、画像表示に最適です。
すでに表示している画像を別の画像に差し替えたい場合は、itemconfig()メソッドを使ってキャンバス上のアイテムを再設定します。このメソッドに新しい画像オブジェクトを渡すことで、ウィンドウ上の画像を動的に更新できます。
サンプルコード
この例では、任意の画像を3枚用意し、プロジェクトと同じディレクトリに保存しておいてください。ここでは「logo.png」「logo2.png」「logo3.png」というファイル名を想定しています。
# 必要なライブラリをインポート
from tkinter import *
from tkinter import ttk
from PIL import Image, ImageTk
# tkinterフレームのインスタンスを作成
win = Tk()
# ウィンドウサイズを設定
win.geometry("750x400")
# 画像を更新する関数を定義
def update_image():
canvas.itemconfig(image_container, image=img2)
# キャンバスを作成し、画像を配置する
canvas = Canvas(win, width=650, height=350)
canvas.pack()
# キャンバスの画像を更新するボタンを作成
button = ttk.Button(win, text="更新", command=lambda: update_image())
button.pack()
# 画像を読み込んで変数に格納
img1 = PhotoImage(file="logo.png")
img2 = PhotoImage(file="logo2.png")
img3 = PhotoImage(file="logo3.png")
# キャンバスに画像を追加
image_container = canvas.create_image(0, 0, anchor="nw", image=img1)
win.mainloop()実行結果
上記のコードを実行すると、キャンバスと「更新」ボタンが配置されたウィンドウが表示されます。初期状態では最初の画像(img1)がキャンバス左上に表示されています。
「更新」ボタンをクリックすると、update_image()関数が呼び出され、itemconfig()によって表示中の画像が2枚目の画像(img2)に切り替わります。
ポイント解説
- create_image()の戻り値(アイテムID)を変数に保存しておくことが重要です。このIDをitemconfig()に渡すことで、対象の画像だけを更新できます。
- anchor="nw"を指定すると、画像の左上が座標(0, 0)に合わせて配置されます。
- Tk 8.6以降ではPhotoImageがPNG形式にネイティブ対応していますが、JPEGなど他の形式を扱う場合はPillowのImageTk.PhotoImageを使用してください。
-
Tkinterで画像をボタンとして使う方法をわかりやすく解説
Tkinterでは、画像ファイルをそのままボタンとして表示することができます。この記事では、角丸の画像ボタンを作成する方法を、実際のコード例とともに解説します。ここで紹介する手法は、フォーム、ゲーム、ダイアログボックスなど、さまざまなアプリケーションに応用できる汎用的なテクニックです。 画像ボタンの作り方の基本 Tkinterで見栄えの良い角丸ボタンを作る最も簡単な方法は、あらかじめ用意したボタン用の画像を、クリック可能なウィジェットとして配置することです。これを実現するのがPhotoImage()関数で、指定した画像ファイルを読み込んでボタンに渡すことができます。 具体的には、以下の手順で画
-
Python Tkinterでキャンバス上の画像を中央に配置する方法
Tkinterを使ってGUIアプリケーションを開発している際、Tkinterのキャンバス(Canvas)上に画像を読み込みたいケースはよくあります。本記事では、その画像をキャンバスの中央に配置する方法を解説します。anchorパラメータとはデフォルトでは、キャンバスは画像を自身の幅と高さに従って配置します。しかし、anchor(アンカー)パラメータに方向の値を渡すことで、画像の位置を任意の方向(N:北、S:南、E:東、W:西、NS、EWなど)に操作できます。アンカーは画像関数と一緒に呼び出されるパラメータで、キャンバス内における画像の方向や位置を定義します。このanchorパラメータを活用すれ