Mac Big Sur环境下使用tkmacosx库Button组件报错:unknown color name 'systemWindowBackgroundColor'
我之前在Mac Big Sur上用tkmacosx库时也踩过这个坑,给你梳理下问题原因和可行的解决办法:
错误根源
这个报错是因为tkmacosx库默认使用了systemWindowBackgroundColor这个系统颜色名,但这个颜色是Tcl/Tk 8.6.11及以上版本才支持的新系统动态颜色。而你当前Python环境附带的Tk版本大概率低于这个版本(比如Mac Big Sur自带的Python对应的Tk版本通常偏旧),导致Tk无法识别这个颜色名,从而抛出_tkinter.TclError。
另外提个小细节:你代码里的button2.pac()是笔误,应该改成button2.pack(),不然运行还会触发另一个报错哦。
解决方案
方案1:显式指定背景色(快速临时修复)
创建tkmacosx.Button时,手动添加bg参数,覆盖库默认的系统颜色设置,比如用接近Big Sur系统背景的浅灰色,或者你需要的自定义颜色:
import tkinter as tk from tkmacosx import Button window = tk.Tk() button = tk.Button(window, text='Text', highlightbackground='gray15', fg='pink') button.pack() # 显式设置bg参数,避开未被识别的系统颜色 button2 = Button(window, text='Text', bg='#fafafa') # #fafafa是接近系统默认背景的颜色 button2.pack() window.mainloop()
方案2:更新Tcl/Tk版本(彻底解决问题)
最根本的办法是把Tcl/Tk版本升级到8.6.11及以上,这样就能原生支持systemWindowBackgroundColor这类系统颜色了。推荐通过Homebrew安装最新版Python(Homebrew打包的Python会附带更新的Tk):
- 打开终端,执行命令:
brew install python
- 安装完成后,用这个新的Python环境运行代码,就能正常使用
tkmacosx的默认设置了。
你可以先检查当前Tk的版本,确认是否需要更新:
import tkinter as tk print(tk.TkVersion)
如果输出小于8.6.11,就需要执行更新操作。
方案3:修改tkmacosx库源码(应急方案,不推荐)
如果你暂时不想更新环境,可以直接修改tkmacosx库的代码,替换掉不兼容的颜色名:
- 找到库的安装路径,比如你报错里的
/usr/local/lib/python3.9/site-packages/tkmacosx/ - 打开
basewidgets/button_base.py文件,搜索systemWindowBackgroundColor,把它替换成white或者#fafafa这类Tk能识别的颜色。 - 保存后重新运行代码即可。不过这个方法不推荐,因为库更新后会覆盖你的修改。
内容的提问来源于stack exchange,提问作者lefflerv6
相关产品推荐
相关产品推荐

