首页 > 解决方案 > 使用 PIL 打开后无法在 tkinter 中显示图像

问题描述

我试图让 tkinter 打开用户从文件浏览器提示中选择的图像并将其显示在画布上。我计划稍后编辑此图像,因此我使用 PIL 来编辑和支持其他文件类型。但是,当我尝试显示图像时,什么都没有显示,也没有引发错误。我真的不知道为什么会这样。我认为这可能是因为 Image 是 tkinter 和 PIL 中共享的模块名称,但我不确定。

代码:

from tkinter import *
from tkinter import filedialog
from PIL import ImageTk, Image

root = Tk()
canvas = Canvas(root, width=300, height=300)
canvas.pack(expand=YES, fill=BOTH)
img = Image.open(
    filedialog.askopenfilename(title="Select file", filetypes=(("jpeg files", "*.jpg"), ("all files", "*.*"))))
canvas.create_image(0, 0, image=ImageTk.PhotoImage(img), anchor=NW)
canvas.update()
root.mainloop()

标签: pythontkintercanvaspython-imaging-library

解决方案


我发现如果你把线分开

canvas.create_image(0, 0, image=ImageTk.PhotoImage(img), anchor=NW)

分成两行

img = ImageTk.PhotoImage(img)
canvas.create_image(0, 0, image=img, anchor=NW)

会工作,我不知道为什么,但它是一个快速修复。


推荐阅读