#問題
PSDファイル読み込んでレイヤー別にtkinterのCanvasに表示しようとしたらできなくて困った話
問題のコード
def preview(path):
global canvas
image = PSDImage.open(path)
imagetk = ImageTk.PhotoImage(image)
canvas.create_image(image=imagetk)
#原因
関数で「ImageTk.PhotoImage」を使ってオブジェクトを生成しただけだとガベージコレクションで消されちゃってCanvasで表示されないっていう情報がネットで発見
Canvasは参照してるわけじゃないのかなぁ?
それか関数内のものだから関数の処理終わったら消えちゃうとか?
よくわかんない
#対策
ちゃんと残るように生成されたオブジェクトはグローバルの配列で保存することにしました
修正後
imagetk_list = list()
def preview(path):
global canvas,imagetk_list
image = PSDImage.open(path)
imagetk = ImageTk.PhotoImage(image)
imagetk_list.append(imagetk)
canvas.create_image(image=imagetk)