2019年12月15日日曜日

tkinter canvas で悩んだ!

tkinter を使って、キャンバスにイメージが書けなかったこと。

ルートにある場合はうまくいった。。。。。。変数は、すべてグローバルだからね!
(関数でない場合)

img = Image.open( '1215_96.png' )
img = ImageTk.PhotoImage(img)

canvas = tkinter.Canvas(root, bg = "black", width=400, height=300)
canvas.create_image(30, 30, image=img, anchor=tkinter.NW)

説明だけど
1.ファイルからイメージを読み込む
2.イメージの変換(IPL)からtkinterで使えるのにするみたい
3.キャンバスを作成
4.イメージを位置指定してソースを指定

ここで問題が発生した!
関数にして違う画像を表示しようとしたが、できなかった!

いろいろぐぐると、こんな感じだと思ったが違っていた。(もちろんテキストだが)
因みにテキストは、関数内でできる!
text = canvas.create_text(200, 200, text="old text")
canvas.delete(text)
text = canvas.create_text(200, 200, text="old text")こちらは、別の方法、
text = canvas.create_text(200, 200, text="old text")
canvas.itemconfig(text, text="new text")




原因は、黄色の部分のimageを指定いるものが、グローバル変数でないと駄目という事みたいだ。
canvas.create_image(30, 30, image=img, anchor=tkinter.NW)

結論、
イメージの変数指定の場合、グローバル変数にする事!
(キャンバスの画像は消えるが、画像は表示されないぞ~)

データ量が多いので、グローバルにしかできないと思っておこう