メニューバーからfiledialogを呼び出して画像を表示しよう
今回はtkinterのfiledialogをメニューバーから呼び出して、キャンバスに画像を表示してみましょう。
前回は表示する画像サイズは固定でしたが、今回はキャンバスに収まるようにサイズの大きな画像は縮小して表示します。
また、PNG形式のファイルだけでなく、JPEG形式のファイルも表示するために、画像表示ライブラリーとしてPILの後継であるPillowを使います。
メニューバーの使い方やJPEG画像の表示に関しては、以下の記事を参照してください。
画像の比率を維持したままサイズを縮小する
画像サイズの縮小は、ImageOpsモジュールのImageOps.pad()メソッドを使います。
ImageOps.pad()メソッドは、画像の縦横比を維持したまま、画像サイズの縮小拡大ができます。
PILライブラリーのインポート
ImageOpsモジュールを使うには、PILライブラリーをインポートします。
以下のように、必要なライブラリーのみをインポートするのが一般的です。
from PIL import Image,ImageTk,ImageOps
ImageOps.padの使い方
ImageOps.pad()メソッドの使い方は、以下の通りです。
ImageOps.pad(画像オブジェクト, サイズ [, method=3, color=None, centering=(0.5,0.5)])
オプション | 内容 |
画像オブジェクト | ImageOpen()メソッドでオープンした画像オブジェクト |
サイズ | 幅と高さをピクセル単位で指定したタプル 例:(640,400) |
method | リサンプリング方法 以下の定数や0~5が指定可能。デフォルトはBICUBIC(3) 0 NEAREST/NONE 1 LANCZOS/ANTIALIAS 2 BILINEAR/LINEAR 3 BICUBIC/CUBIC 4 BOX 5 HAMMING ※ 定数を使う場合は、Image.BICUBICのように先頭にImageを付ける 詳しくは、公式サイトを参照 |
color | 画像の背景色。デフォルトは黒(black/#000000) カラー名や先頭に#(シャープ)を付けた16進数が指定可能 |
centering | 画像の位置。デフォルトは(0.5,0.5)で中央に配置 (0,0)は左上、(1,1)は右下に配置 |
ImageOpsモジュールには、他にも様々なメソッドがあります。
詳しいImageOpsモジュールの使い方や各メソッドのオプションの内容は、以下の公式サイトを参照してください。
メニューバーからfiledialogを呼び出して画像を表示するプログラム
メニューバーからfiledialogを呼び出して画像を表示するプログラムは、以下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
### インポート import tkinter import tkinter.filedialog from PIL import Image,ImageTk,ImageOps ### 定数 WIDTH = 640 # 幅 HEIGHT = 400 # 高さ ### 関数(開く) def f_open(): ### グローバル変数 global image ### ファイルダイアログ name = tkinter.filedialog.askopenfilename(title="ファイル選択", initialdir="C:/", filetypes=[("Image File","*.png;*.jpg")]) ### 画像ロード image = Image.open(name) image = ImageOps.pad(image, (WIDTH,HEIGHT)) image = ImageTk.PhotoImage(image=image) ### キャンバスに表示 canvas.create_image(WIDTH/2, HEIGHT/2, image=image) ### 関数(閉じる) def f_close(): ### キャンバスクリア canvas.delete("all") ### メイン画面作成 main = tkinter.Tk() ### 画面サイズ設定 main.geometry("640x400") ### メニューバー作成 menubar = tkinter.Menu(main) ### ファイルメニュー作成 filemenu = tkinter.Menu(menubar, tearoff=0) filemenu.add_command(label="開く", command=f_open) filemenu.add_command(label="閉じる", command=f_close) filemenu.add_separator() filemenu.add_command(label="終了", command=main.quit) ### メニュー設定 menubar.add_cascade(label="ファイル", menu=filemenu) ### メニューバー配置 main.config(menu=menubar) ### キャンバス作成・配置 canvas = tkinter.Canvas(main, width=WIDTH, height=HEIGHT) canvas.pack() ### イベントループ main.mainloop() |
親ウィンドウのメニューバーから「開く」を選択します。
「閉じる」を選択すると、表示されている画像をクリアすることができます。
表示する画像ファイルを選択します。
PNG形式とJPEG形式の画像ファイルを選択することができます。
サイズの大きなファイルを選択すると、画像が縮小されて表示されます。