为什么PNG图片在Tkinter界面中突然显示黑色背景
问题根因
- 两台设备的Pillow库、tkinter运行环境版本不一致,部分版本的Pillow在调用
ImageTk.PhotoImage时不会自动识别并处理PNG的alpha透明通道 - 部分Windows系统的tkinter默认渲染逻辑不会自动处理图片控件的透明背景,需要显式对齐控件与父容器的背景属性
- 代码中冗余的
while True循环会干扰窗口渲染队列,部分环境下会导致透明通道渲染异常
修复方案
修改代码如下:
from tkinter import * from PIL import ImageTk, Image root = Tk() root.geometry("1300x731") root.resizable(width=False, height=False) # 打开图片后显式转换为RGBA模式,强制保留透明通道 photo = Image.open("logo.png").convert("RGBA") zoom = 0.5 pixels_x, pixels_y = tuple([int(zoom * x) for x in photo.size]) img = ImageTk.PhotoImage(photo.resize((pixels_x, pixels_y))) # Label显式设置背景色与主窗口一致,避免透明通道渲染为黑色 panel = Label(root, image = img, bg=root.cget("bg")).place(relx = 0.5, rely = 0.1, anchor = 'center') root.config(cursor="@curs.cur") # 去掉冗余的while True循环,mainloop本身为阻塞循环 root.mainloop()
如果修改后仍有问题,可统一两台设备的Pillow版本,执行命令pip install pillow==9.5.0安装兼容性较好的稳定版即可。
内容的提问来源于stack exchange,提问作者Nir Cohen
相关产品推荐
相关产品推荐

