tkinter显示图片
直接显示
import tkinter
root = tkinter.Tk()
img_gif = tkinter.PhotoImage(file = '1dpmw.gif')
label_img = tkinter.Label(root, image = img_gif)
label_img.pack()
root.mainloop()
但是上面的有一个问题,就是对于png
这类图片显示不成功,会发现是空白,所以不推荐使用,因为只支持.gif
一种形式。
用PIL加载显示
import tkinter
from PIL import Image, ImageTk
root = tkinter.Tk()
img_open = Image.open("2021-02-06_105510.png")
img_png = ImageTk.PhotoImage(img_open)
label_img = tkinter.Label(root, image = img_png)
label_img.pack()
root.mainloop()
注意和上面的区别,其实就是图片加载的方式由原来的img_gif = tkinter.PhotoImage(file = '1dpmw.gif')
变为现在的:
img_open = Image.open("2021-02-06_105510.png")
img_png = ImageTk.PhotoImage(img_open)
因为Image里面可以帮你解码,所以可以直接显示png。
上面显示是通过把图片放在label上面实现的,你也可以放到button或者canvas上面都是可以的。
图片显示空白
但你可能发现你在使用的时候,你的显示是空白,这里是因为你在开发的时候上面的一段话会写在一个函数里面封装起来,这个时候导致img_open是局部的,所以函数运行结束就被回收了,所以显示的是空白,解决方案也很简单,将这个变量声明为全局即可。
import tkinter
from PIL import Image, ImageTk
root = tkinter.Tk()
img_png =None
def func():
img_open = Image.open("2021-02-06_105510.png")
global img_png
img_png = ImageTk.PhotoImage(img_open)
label_img = tkinter.Label(root, image = img_png)
label_img.pack()
func()
root.mainloop()