python - 使用 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()
解决方案
我发现如果你把线分开
canvas.create_image(0, 0, image=ImageTk.PhotoImage(img), anchor=NW)
分成两行
img = ImageTk.PhotoImage(img)
canvas.create_image(0, 0, image=img, anchor=NW)
会工作,我不知道为什么,但它是一个快速修复。
推荐阅读
- c# - Dapper 为少数对象返回空值
- c# - 在 Infragistics UltraGrid 中捕获 Ctrl+C、Ctr+V
- twitter-bootstrap - 如何使用引导程序对我的代码中的列进行排序
- php - 无法使用 composer (version 2.1.4) 创建 laravel 项目
- azure-devops - Azure Dev Ops:如何在工作项模板上设置布尔项的默认值
- postgresql - 粘合 PostgreSQL 连接:“无法找到合适的安全组”
- icons - 使用css创建图标栏
- pdf - pdf如何批量列出带有注释的pdf?qpdf? pdf信息?
- ios - 如何使用头文件定义 obj c 目标,以便其他目标可以在 SPM 中实现它?(错误:产品“Foo”中引用的目标“Foo”为空)
- java - 无限循环真的在java中无限循环吗?