在tk中会使用到给label或是button等加载图像时常会涉及到以下问题。
问题:在使用tkinter加载图像时 如 photo = PhotoImage(file=‘xxx.jpg’),会出现TclError: couldn’t recognize data in image file “xxx.jpg”。
原因:tkinter只支持gif格式,当加载图像为jpg或者png格式时需要通过PIL模块来实现(注意这里tk只看图像本来的格式:即如原本图像是jpg,即使把后缀改成了gif也不能识别。原本图像是gif,即使后来后缀改成了jpg也可以正常加载)。
1.安装python中操作图像的库-PIL(Python Image Library)
现在的PIL已经被Pillow代替,所以安装Pillow就行。
1) 通过pycharm安装。
2) 通过pip直接安装。
导入时仍然使用 PIL 就行。
2.借助PIL模块来加载jpg,png图片
代码如图下:
from PIL import Image, ImageTk
# 通过PIL打开图片
img = Image.open('xxx.jpg')
# 通过PIL来生成PhotoImage对象,即可正常加载
photo = ImageTk.PhotoImage(img)
3.以上都完成的情况下,显示图像大小的框,却没有图像内容。
注意图像的引用是否被回收。
若是被回收,记得保存PhotoImage对象。
4.组件(如button)既要显示文字又要显示图像
注意使用 compound 选项,否则只会显示图像不显示文本。
选项 | 含义 |
---|---|
CENTER | 文字显示在图像上(重叠) |
TOP | 图像显示在文本上方 |
BOTTOM | 图像显示在文本下方 |
LEFT | 图像显示在文本左方 |
RIGHT | 图像显示在文本右方 |