使用 tkinter 和 Pillow 显示图像

Display an image with tkinter and Pillow

这是我的代码

import tkinter as tk
import cv2
import PIL.Image, PIL.ImageTk

window = tk .Tk()

img = cv2.imread('bee1.jpg')

height, width, no_channels = img.shape

canvas = tk.Canvas(window, width = width, height = height)
canvas.pack()

photo = PIL.ImageTk(0,0,image=photo,anchor=tk.NW)


window.mainloop()

我 运行 Pycharm 2019.3,Ubuntu(最新)

我收到这个错误:

ImportError: cannot import name '_imaging' from 'PIL' (/usr/lib/python3/dist-packages/PIL/__init__.py)

我要加载的图像是:

enter image description here

您的代码中有几处错误:

  • 您需要使用 from PIL import Image 导入 PIL 否则您将得到您所看到的错误,

  • 你真的不应该在这里使用 OpenCV 来读取图像,原因有两个……首先,无论如何它都在下面使用 PIL,所以你添加了不必要的依赖,其次,因为 OpenCV 使用 BGR 顺序而不是比 RGB 所以一切都是从后到前,除非你改变它,这意味着你也可以首先使用 PIL 来读取图像。


无论如何,我已经够洋洋得意了,这里有一些工作代码:

#!/usr/bin/env python3

import tkinter as tk
from PIL import Image, ImageTk

window = tk.Tk()

img = Image.open('bee.jpg')
width, height = img.size

canvas = tk.Canvas(window, width = width, height = height)
canvas.pack()

photo = ImageTk.PhotoImage(img)
canvas.create_image(width//2, height//2, image=photo)

window.mainloop()