10

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

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

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

4

3 回答 3

11

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

具有透明度和 Alpha 的示例 PNG 文件

上面的 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()

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

Python 3.4.1 tkinter 中的 PNG 测试图像和文本

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

于 2014-08-03T06:13:58.450 回答
2

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

取自这里

Pillow >= 2.0.0 支持 Python 版本:2.6、2.7、3.2、3.3。Pillow < 2.0.0 支持 Python 版本:2.4、2.5、2.6、2.7。

于 2013-07-04T20:24:46.537 回答
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)
于 2019-10-14T03:25:56.653 回答