tkinterで画像を表示させる方法

こんにちは、βshortです。
今回の記事は、「tkinterでpngやjpgなどのgif以外の画像を表示させる方法」です。

結論から言います。
解決方法は、PILImageImageTkを使うことです。

それでは、画像を表示させていきましょう。

追加:TkinterはPNGに対応しました。
  :jpegは対応していません。

追加:TkinterはPNGに対応しました!

Tkのバージョン8.6から、PNGが対応しました。

PhotoImage for images in PGM, PPM, GIF and PNG formats. The latter is supported starting with Tk 8.6.
tkinterのリファレンスより引用

残念ながら、jpegは対応していません。
jpegを使う場合は、次章のTkinterは標準でjpgなどに対応していないを参照してください。

バージョンの確認

Tkinterのバージョンを確認してください。

PNGを使用するには、Tkinterのバージョンが8.6以上である必要があります。

画像を表示させる

import tkinter as tk

# ウィンドウ作成
root = tk.Tk()
root.title("榛名")
root.minsize(796, 816)

# 画像表示
#fileに適当なpng画像を指定してください。
haruna = tk.PhotoImage(file="haruna_kankore.png")

canvas = tk.Canvas(bg="black", width=796, height=816)
canvas.place(x=0, y=0)
canvas.create_image(0, 0, image=haruna, anchor=tk.NW)

# メインループ
root.mainloop()

Tkinterは標準でjpgなどに対応していない

pngやjpgの画像が表示できない

という問題がありました。

Tkは標準でGIFやPPM/PGM形式の画像ファイルを扱うことができます。
お気楽Python/Tkinter入門

tkinterでは、標準でpngやjpgといったイメージファイル形式には対応していません

そこで、ここではtkinterの標準の画像表示でない方法を使って解決します。
これで、pngやjpgなどの画像が表示できるようになります。


PILで画像を表示する

PILのImageImageTkを使います。

tkinterで画像を表示することが出来るようになります。

import tkinter as tk
from PIL import Image, ImageTk


画像の開き方

Imageのopenを使って画像を開きます。
リサイズなど画像の処理をする場合、下のコードの指定の場所に記述してください。

まず、Imageで画像を開き、Imageの形で、画像の加工をします。
そのあとに、Tkinter用に変換をかけるといった処理手順を踏んでいます。

img = Image.open(open('test.jpg', 'rb'))
'''
リサイズなどの処理をする
'''
img = ImageTk.PhotoImage(img) 


画像の表示

画像の表示では、サムネイルにある画像と同じものを実行するソースコードを記載します。
[web上にある画像を保存します]の部分がそれに当たります。

import tkinter as tk
from PIL import Image, ImageTk
import urllib.request as req

'''
web上にある画像を保存します
'''
url = "http://imgcc.naver.jp/kaze/mission/USER/20180519/35/3012705/157/500x718xedab7ba7e203cd7576d12004.jpg"
req.urlretrieve(url, "test.jpg")

'''
tkinterのメイン
'''
root = tk.Tk()

root.geometry('800x560')
root.title('IMG')

canvas = tk.Canvas(
    root, # 親要素をメインウィンドウに設定
    width=500,  # 幅を設定
    height=500 # 高さを設定
    #relief=tk.RIDGE  # 枠線を表示
    # 枠線の幅を設定
)

canvas.place(x=0, y=0)  # メインウィンドウ上に配置

#PILでjpgを使用
img1 = Image.open(open('test.jpg', 'rb'))
img1.thumbnail((500, 500), Image.ANTIALIAS)
img1 = ImageTk.PhotoImage(img1)  # 表示するイメージを用意

canvas.create_image(  # キャンバス上にイメージを配置
    0,  # x座標
    0,  # y座標
    image=img1,  # 配置するイメージオブジェクトを指定
    tag="illust",  # タグで引数を追加する。
    anchor=tk.NW  # 配置の起点となる位置を左上隅に指定
)

root.mainloop()


まとめ

tkinterでは、標準でGIFやPPM/PGM形式の画像ファイルを扱うことが出来る。
しかし、一般的な画像形式である、pngやjpgは標準で対応していません。

そこで、PILのImageとImageTkを利用した表示方法を紹介しました。


参考

 βshortの自堕落Diary 
tkinterで画像を表示させる - βshortの自堕落Diary
https://weblog2016it.hatenablog.com/entry/2017/09/05/tkinterで画像を表示させる
pythonでGUItkinterでGUIを作っていきます。 tkinterで画像を表示したいと思います。ソースコード import tkinter as tk root = tk.Tk() canvas = tk.Canvas( root, # 親要素をメインウィンドウに設定 width = 500, # 幅を設定 height = 300, # 高さを設定 relief=tk...



12歳からはじめる ゼロからの Pythonゲームプログラミング教室

おすすめ