You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tkinter带图片按钮出现白色闪烁背景问题求助

解决Tkinter按钮加载PNG后白色闪烁背景问题

问题描述

使用Pillow库为Tkinter按钮加载PNG图片后,按钮出现白色闪烁背景,期望呈现无边框的正常PNG样式。当前代码如下:

import tkinter as tk 
from PIL import ImageTk, Image

window = tk.Tk()
window.config(bg="black")
window.title("V1")

img= (Image.open("./01_V1/01_MainUI//Order.png"))
resized_image= img.resize((300,300), Image.ANTIALIAS)
new_image= ImageTk.PhotoImage(resized_image)


order_button = tk.Button(image=new_image, relief='flat',borderwidth=0, bg="black")
order_button.grid(column=1, row=1)

window.mainloop()

解决方案

白色闪烁的核心原因是按钮在聚焦、点击状态下会触发默认的高亮背景渲染,仅设置borderwidth=0和bg不足以完全消除。通过以下修改即可解决:

  • 添加highlightthickness=0:移除按钮获得焦点时的高亮边框
  • 设置activebackground="black":确保按钮被点击时背景颜色与窗口背景一致,避免闪烁
  • (可选)将Image.ANTIALIAS替换为Image.LANCZOS:ANTIALIAS在新版本Pillow中已被标记为过时,LANCZOS是官方推荐的高质量缩放算法

修改后的完整代码:

import tkinter as tk 
from PIL import ImageTk, Image

window = tk.Tk()
window.config(bg="black")
window.title("V1")

# 加载并缩放图片,使用LANCZOS替代过时的ANTIALIAS
img = Image.open("./01_V1/01_MainUI//Order.png")
resized_image = img.resize((300, 300), Image.LANCZOS)
new_image = ImageTk.PhotoImage(resized_image)

# 优化按钮参数,消除白色闪烁
order_button = tk.Button(
    image=new_image,
    relief='flat',
    borderwidth=0,
    bg="black",
    highlightthickness=0,  # 移除聚焦高亮
    activebackground="black"  # 点击时背景不变色
)
order_button.grid(column=1, row=1)

window.mainloop()

额外说明

如果你的PNG图片本身带有透明通道,以上修改就能让按钮完全显示图片的透明效果,不会出现白色背景。如果问题仍然存在,可以检查图片路径是否正确,或者尝试添加img = img.convert("RGBA")确保透明通道被正确识别。

内容的提问来源于stack exchange,提问作者z3nox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:31:37