MacOS Ventura系统下如何用Tkinter显示带透明背景的图片?
新版MacOS下Tkinter实现透明背景图片的可行方案
旧代码依赖的systemTransparent和-transparent属性在新版MacOS(如Ventura、Sonoma)中已不再生效,可通过以下方法实现需求:
核心修改逻辑
- 用
-transparentcolor替代旧的-transparent属性,指定一个自定义的特殊颜色作为透明标记 - 将窗口和标签的背景色统一设置为该特殊颜色,系统会自动将此颜色区域渲染为透明
修改后的可运行代码
import tkinter as tk root = tk.Tk() root.overrideredirect(True) root.wm_attributes("-topmost", True) # 选择一个图片中不会用到的特殊颜色作为透明标记 transparent_color = '#000001' # 开启透明色效果,指定颜色区域将被系统渲染为透明 root.wm_attributes("-transparentcolor", transparent_color) # 设置窗口背景为透明标记色 root.config(bg=transparent_color) root.geometry("+300+300") # 优先使用带alpha通道的PNG图片(GIF透明支持有限) root.image = tk.PhotoImage(file="photoshop-icon.png") # 标签背景同样设为透明标记色 label = tk.Label(root, image=root.image, bg=transparent_color) label.pack() root.mainloop()
额外注意事项
- 建议使用PNG格式图片,其alpha通道对透明效果的支持比GIF更完善
- 自定义透明色要确保不会出现在图片的非透明区域,否则对应区域也会被透明化
- 若需要拖动窗口,可添加鼠标事件监听实现拖拽功能(
overrideredirect(True)会移除默认标题栏的拖拽能力)
内容的提问来源于stack exchange,提问作者Noah Moscovici
相关产品推荐
相关产品推荐

