Python上的Tkinter显示某些(单色)图像搞砸了

时间:2017-11-18 22:31:20

标签: python image tkinter

我正在尝试在Tkinter窗口中显示图像,对于某些图像,Tkinter显示它们搞砸了。我注意到它只发生在单色图像上,除了灰色阴影外没有任何颜色的图像。

Here's the result window.

上图(月亮)显示不正确,而下图(雨)则不正确。这是在MS Paint(左)和Win10上的照片查看器(右)中查看的图像。 Here's the image viewed in MS Paint (left) and Photo viewer on Win10 (right).

我不确定是什么导致了这个问题,因为我看不到图像中的错误。

自从我从Yahoo Weather获取它们之后,这里是a link to the "faulty" moon image,而这里是a link to the "correct" rain image

最后,这是我的代码:

import tkinter
from PIL import Image, ImageTk

window = tkinter.Tk()

# This part doesn't work as intended
display = ImageTk.PhotoImage(Image.open('moon.png'))
label = tkinter.Label(window, image=display)
label.pack()

# This part does
display2 = ImageTk.PhotoImage(Image.open('rain.png'))
label2 = tkinter.Label(window, image=display2)
label2.pack()

window.mainloop()

注意:我正在使用PIL fork (据我所知,PIL仅适用于Python 2)Pillow

你能帮我搞清楚吗?

1 个答案:

答案 0 :(得分:2)

您的示例显示ImageTk无法正常处理灰度图像。但至少有两种解决方法可以正确显示图片。

首先不要使用ImageTk。实际上,自Tk 8.6起,PhotoImage可以加载PNG图像:

import tkinter

window = tkinter.Tk()
display = tkinter.PhotoImage(file='moon.png')
label = tkinter.Label(window, image=display)
label.pack()

window.mainloop()

但如果您绝对需要使用ImageTk,则可以将图片模式更改为RGBA:

import tkinter
from PIL import Image, ImageTk

window = tkinter.Tk()

moon = Image.open('moon.png')
moon.mode = 'RGBA'   # force mode to RGBA
display = ImageTk.PhotoImage(moon)
label = tkinter.Label(window, image=display)
label.pack()

window.mainloop()