Python
 Computer >> コンピューター >  >> プログラミング >> Python

PIL(Pillow)を使ってTkinterのCanvasウィジェットに画像を埋め込む方法

PythonのPillowライブラリは、基本的な画像処理機能をすべて備えたオープンソースのライブラリです。JPEGやPNGなど、さまざまな形式の画像を読み込み、処理し、操作するための機能を提供しています。

ここでは、簡単な例を通じて、Pillowパッケージ(PIL)を使用してTkinterのキャンバスに画像を埋め込む方法を解説します。以下の手順に従ってください。

手順

  • 必要なライブラリをインポートし、tkinterフレームのインスタンスを作成します。

  • root.geometry()メソッドを使用して、フレームのサイズを設定します。

  • Canvas()関数でCanvasウィジェットを作成し、height(高さ)とwidth(幅)を指定します。

  • Image.open()で画像ファイルを開き、ImageTk.PhotoImage()を使ってTkinterで扱える画像オブジェクトに変換します。変換した画像は変数imgに保存しておきます。

  • canvas.create_image()メソッドを使用して、PIL画像をキャンバス上に配置します。

  • 最後に、アプリケーションウィンドウのmainloopを実行してプログラムを起動します。

サンプルコード

# 必要なライブラリをインポート
from tkinter import *
from PIL import Image, ImageTk

# tkinterフレームのインスタンスを作成
root = Tk()

# フレームのサイズを設定
root.geometry("700x450")

# Canvasウィジェットを作成
canvas = Canvas(root, width=600, height=400)
canvas.pack()

# 画像を読み込む
img = ImageTk.PhotoImage(Image.open("camels.jpg"))

# 画像をキャンバス上に追加
canvas.create_image(250, 250, anchor=CENTER, image=img)

root.mainloop()

実行結果

このコードを実行すると、次のような出力ウィンドウが表示されます。

PIL(Pillow)を使ってTkinterのCanvasウィジェットに画像を埋め込む方法

ポイントの解説

  • ImageTk.PhotoImage()は、PILの画像オブジェクトをTkinterで表示可能な形式に変換する重要な役割を担います。この変換を行わないと、キャンバスに画像を表示できません。

  • create_image()の引数anchor=CENTERを指定することで、指定した座標(この例では250, 250)を中心として画像が配置されます。デフォルトでは左上が基準点となるため、配置位置を調整したい場合に便利です。

  • 読み込んだ画像オブジェクトは必ず変数に保持してください。ローカル変数として破棄されると、画像が正しく表示されないことがあります。

  1. Python Tkinterでキャンバス上の画像を中央に配置する方法

    Tkinterを使ってGUIアプリケーションを開発している際、Tkinterのキャンバス(Canvas)上に画像を読み込みたいケースはよくあります。本記事では、その画像をキャンバスの中央に配置する方法を解説します。anchorパラメータとはデフォルトでは、キャンバスは画像を自身の幅と高さに従って配置します。しかし、anchor(アンカー)パラメータに方向の値を渡すことで、画像の位置を任意の方向(N:北、S:南、E:東、W:西、NS、EWなど)に操作できます。アンカーは画像関数と一緒に呼び出されるパラメータで、キャンバス内における画像の方向や位置を定義します。このanchorパラメータを活用すれ

  2. PythonとTkinterでデジタル時計を作成する方法【初心者向け解説】

    Pythonの標準GUIライブラリ「Tkinter」を使えば、デスクトップアプリケーションを手軽に開発できます。本記事では、Tkinterを活用して、時・分・秒をリアルタイムに表示するデジタル時計を作成する方法を解説します。 デジタル時計の仕組み このプログラムでは、Pythonのtimeモジュールからstrftimeメソッドを使用し、「時:分:秒」形式で現在時刻を取得して表示します。具体的な流れは以下の通りです。 strftime(%H:%M:%S)で現在時刻を文字列として取得する Tkinterのラベル(Label)ウィジェットを作成し、時刻を表示する after()メソッドを使い、20