介绍
在基于图形用户界面的应用程序中,图像起着至关重要的作用。从应用程序图标到动画,都很有用。
为了在标签、按钮、画布和文本小部件中显示图像,使用了PhotoImage类,它存在于tkinter包中。
示例代码
from tkinter import *
root = Tk()
canvas = Canvas(root, width = 500, height = 500)
canvas.pack()
img = PhotoImage(file="www.linuxmi.com.ppm")
canvas.create_image(0,0, anchor=NW, image=img)
mainloop()
“PhotoImage()”函数返回图像对象。
输出如下:
用Python显示图像就这么简单。但是,问题是PhotoImage类只支持GIF和PGM/PPM格式。
更通用的格式是JPEG/JPG和PNG。要用这些格式打开和显示,我们需要ImageTk和PIL(photo imaging Library)包中的图像类的帮助。
在PIL的帮助下,我们可以加载超过30种格式的图像,并将它们转换为图像对象,甚至可以从字符串中使用base64编码的GIF文件。
先决条件,先安装 sudo apt-get install python3-pil python3-pil.imagetk
示例代码
from tkinter import *
from PIL import ImageTk,Image
root = Tk()
canvas = Canvas(root, width = 500, height = 500)
canvas.pack()
img = ImageTk.PhotoImage(Image.open("www.linuxmi.com.png"))
canvas.create_image(0, 0, anchor=NW, image=img)
root.mainloop()
图像类具有属性 “open()” ,它将打开不太直接支持的图像格式,并且与”ImageTk.PhotoImage()”一起,我们可以返回图像对象并使用它。
小记
如果在函数内部显示图像,请确保在Python程序中保留对图像对象的引用,方法是将其存储在全局变量中或将其附加到另一个对象。
global img
def foo(self):
img = ImageTk.PhotoImage(Image.open("www.linuxmi.com.png"))
def foo(self):
self.img = ImageTk.PhotoImage(Image.open("wwww.linuxmi.com.png"))
self.canvas.create_image(20,20, anchor=NW, image=self.img)
self.canvas.image = self.img
这一点很重要,因为当您从函数返回时,如果图像对象存储在该函数的局部变量中,则即使垃圾收集器通过tkinter显示图像,该图像也会被垃圾回收器清除。