tkinterで画像表示する方法 jpgに対応



Python
Pythonとは
基本的な使い方
IDLE
Jupyter Notebook
Markdown
コマンドプロンプトで実行
仮想環境の構築
仮想環境でIDLEを実行
ライブラリのインストール
pipの使い方
numpy , matplotlib等
graphviz
pytorch
Mecab
Pythonの関数:一覧
共通関数
append , extend
class
copy
csv.reader
csv.writer
def , return
dict , defaultdict
enumerate
exit
for
if
import
in
input
lambda
len
list
min/max
OrderedDict
open/close
os
pickle
print
range
re.split
read/readline
round/floor/ceil
split
sys.argv
time
while
write
zip
・特殊メソッド
 ・__name__
 ・__iter__ , __next__
正規表現、メタ文字
データの型の種類
四則演算 (+ , - , * , /)
コメントアウト (# , ''')
numpy
append
arange
argmax/argmin
array
asfarray
astype , dtype
digitize
dot
hstack/vstack
linalg.solve
linspace
mean
meshgrid
mgrid
ndim
ndmin
pad
poly1d
polyfit
prod
random
reshape
savetxt/loadtxt
shape
std
transpose
where
zeros/zeros_like
scipy
expit
imread
interpolate
matplotlib
imshow
figure
pcolormesh
plot
scatter
scikit-learn
GaussianNB
KMeans
KNeighborsClassifier
SVC
tree
keras
chainer
chainerrl
pytorch
BCELoss , MSELoss
Embedding
device
Sequential
Dataset, Dataloader
RNN, LSTM
OpenAI gym
Blackjack-v0
CartPole-v0
tkinter
frame, grid
画像表示
画像を切り取り表示
画像を保存
目的別
ステップ関数
1 of K 符号化法
線形補間
配列に番号をつける

公開日:2021/10/8         

In English


■tkinter関数の説明

tkinterで画像を表示させる方法を説明します。jpgにも対応します。

■tkinter関数を使用した具体例

ImageTkを使用すれば、jpgを表示することができます。

import tkinter as tk
from PIL import Image, ImageTk

app = tk.Tk()
img = Image.open('test.jpg')        # 画像ファイルを開き、ファイル情報取得。text.jpgは任意に設定
tk_img = ImageTk.PhotoImage(img)
img_width, img_height = img.size

canvas = tk.Canvas(app, width=img_width, height=img_height)        # 画像表示エリアの作成
canvas.pack()
canvas.create_image(0, 0 , anchor = tk.NW, image=tk_img)        # 画像表示

app.mainloop()


結果は以下のとおり。


<create_imageの中身>

create_image( X座標 , Y座標 , anchor=表示タイプ ,image=画像名)


ancharは以下のとおりです。

       xの0     yの0
"NW"   画像左     画像上
"W"    画像左     画像中央
"N"    画像中央    画像上
"SE"   画像右      画像下
"S"    画像中央    画像下
"E"    画像右     画像中央
"CENTER" 画像中央    画像中央  (デフォルトはこれ)

■関数化すると画像が表示しなくなる事への対応
画像表示部分を関数化して呼び出す場合、そのままでは画像が表示されなくなります。 原因は一度画像を表示しても、関数が終了した時点で画像情報が不要になったと判断され、内部で削除してしまうからです。対応方法として、以下赤字部分のとおり画像情報をグローバル変数にするか、 青文字部分のように画像情報をdefの外で格納するようにします。赤文字部分青文字部分はどちらか記載するだけで良いです。

import tkinter as tk
from PIL import Image, ImageTk

def draw():
    global tk_img        # 画像情報をグローバル変数にする。
    img = Image.open('test.jpg')        # 画像ファイルを開き、ファイル情報取得。text.jpgは任意に設定
    tk_img = ImageTk.PhotoImage(img)
    img_width, img_height = img.size

    canvas = tk.Canvas(app, width=img_width, height=img_height)        # 画像表示エリアの作成
    canvas.pack()
    canvas.create_image(0, 0 , anchor = tk.NW , image=tk_img)        # 画像表示
    image.append(tk_img)

app = tk.Tk()
image =[]
draw()

app.mainloop()










サブチャンネルあります。⇒ 何かのお役に立てればと

関連記事一覧



Python
Pythonとは
基本的な使い方
IDLE
Jupyter Notebook
Markdown
コマンドプロンプトで実行
仮想環境の構築
仮想環境でIDLEを実行
ライブラリのインストール
pipの使い方
numpy , matplotlib等
graphviz
pytorch
Mecab
Pythonの関数:一覧
共通関数
append , extend
class
copy
csv.reader
csv.writer
def , return
dict , defaultdict
enumerate
exit
for
if
import
in
input
lambda
len
list
min/max
OrderedDict
open/close
os
pickle
print
range
re.split
read/readline
round/floor/ceil
split
sys.argv
time
while
write
zip
・特殊メソッド
 ・__name__
 ・__iter__ , __next__
正規表現、メタ文字
データの型の種類
四則演算 (+ , - , * , /)
コメントアウト (# , ''')
numpy
append
arange
argmax/argmin
array
asfarray
astype , dtype
digitize
dot
hstack/vstack
linalg.solve
linspace
mean
meshgrid
mgrid
ndim
ndmin
pad
poly1d
polyfit
prod
random
reshape
savetxt/loadtxt
shape
std
transpose
where
zeros/zeros_like
scipy
expit
imread
interpolate
matplotlib
imshow
figure
pcolormesh
plot
scatter
scikit-learn
GaussianNB
KMeans
KNeighborsClassifier
SVC
tree
keras
chainer
chainerrl
pytorch
BCELoss , MSELoss
Embedding
device
Sequential
Dataset, Dataloader
RNN, LSTM
OpenAI gym
Blackjack-v0
CartPole-v0
tkinter
frame, grid
画像表示
画像を切り取り表示
画像を保存
目的別
ステップ関数
1 of K 符号化法
線形補間
配列に番号をつける