介绍

在基于图形用户界面的应用程序中,图像起着至关重要的作用。从应用程序图标到动画,都很有用。

为了在标签、按钮、画布和文本小部件中显示图像,使用了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显示图像,该图像也会被垃圾回收器清除。

发表回复