tkinterで画像を表示させる
今回の記事は、「tkinterでpngやjpgなどのgif以外の画像を表示させる方法」です。
結論から言います。
解決方法は、PILのImageとImageTkを使うことです。
それでは、画像を表示させていきましょう。
追加: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のImageとImageTkを使います。
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を利用した表示方法を紹介しました。
参考
12歳からはじめる ゼロからの Pythonゲームプログラミング教室