Python 3.x 中的 PIL ImageTk 等效项

Posted

技术标签:

【中文标题】Python 3.x 中的 PIL ImageTk 等效项【英文标题】:PIL ImageTk equivalent in Python 3.x 【发布时间】:2012-06-19 14:20:55 【问题描述】:

我正在使用 Tkinter 开发一个应用程序,该应用程序使用 png 图像文件的数据库作为图标。为了在应用程序中使用所述图像,我使用 PIL 的 Image.open 打开它们,通过 ImageTk.PhotoImage 函数运行它,然后将其传递给小部件构造函数。

问题是,我正在尝试将整个项目移植到 Python 3.x,由于 PIL 不支持 Python 3,我不知道如何将图标加载到应用程序中。

如果有人知道一种解决方案,可以让我使用这些图标而不必将它们全部转换为.gif 位图,我将非常感激!

【问题讨论】:

【参考方案1】:

该示例在画布上显示图像。

from PIL import Image, ImageTk
# From the PIL (Python Imaging Library) module, we import the Image and ImageTk modules.


self.img = Image.open("tatras.jpg")
self.tatras = ImageTk.PhotoImage(self.img)


# Tkinter does not support JPG images internally. As a workaround, we
# use the Image and ImageTk modules.

canvas = Canvas(self, width=self.img.size[0]+20,  height=self.img.size[1]+20)

# We create the Canvas widget. It takes the size of the image into account. It is 20px wider and 20px higher than the actual image size.

canvas.create_image(10, 10, anchor=NW, image=self.tatras)

【讨论】:

【参考方案2】:

您可以在 Python 3.3 或更早版本中使用 Pillow 处理 png 图像。

取自here:

Pillow >= 2.0.0 支持 Python 版本:2.6、2.7、3.2、3.3。枕头

【讨论】:

【参考方案3】:

PNG 文件,即使具有透明度,也能在 Linux 上的 python 3.4.1 中正确显示在 tkinter 和 ttk 中,即使只有 GIF 和 PPM/PGM 支持是 documented。

上面的PNG图像包含透明度。

from tkinter import *          

root = Tk()                    

photo = PhotoImage(file="example.png")
photo_label = Label(image=photo)
photo_label.grid()             
photo_label.image = photo      

text = Label(text="Text") # included to show background color
text.grid()    

root.mainloop()

上面的代码正确地渲染了具有透明度的图像,如下所示:

请注意,屏幕截图是在没有窗口装饰和深色 GUI 配色方案的设置上制作的。

【讨论】:

以上是关于Python 3.x 中的 PIL ImageTk 等效项的主要内容,如果未能解决你的问题,请参考以下文章

ImageTk.PhotoImage 崩溃

在 Tkinter 中调整 PIL 中的图片大小

Python:这有可能是最详细的PIL库基本概念文章了

Python 3.x PIL 图像保存和旋转

windows下Python 3.x图形图像处理库PIL的安装

无法导入名称'ImageTK'-python 3.5