Win10更新后Excel自动化Tkinter程序exe运行报locale.Error求助
解决方案:ttkbootstrap打包exe后locale.Error问题
报错根源
报错来自ttkbootstrap的DatePickerDialog初始化时调用locale.setlocale,Windows 10更新后系统区域设置变动、PyInstaller打包时缺失locale数据,或用户系统使用了非标准locale导致无法匹配。
可行解决方法
1. 提前强制设置兼容locale(代码层面)
将以下代码放在所有导入语句最开头(尤其是ttkbootstrap之前),优先指定通用兼容的locale:
import locale # 优先尝试通用UTF-8 locale,失败则回退到C locale try: locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') except locale.Error: try: locale.setlocale(locale.LC_ALL, 'zh_CN.UTF-8') except locale.Error: locale.setlocale(locale.LC_ALL, 'C')
注意:必须放在导入ttkbootstrap之前,否则报错会在代码执行前触发。
2. 打包时强制包含locale数据(PyInstaller层面)
PyInstaller默认可能未打包Python的locale目录,导致程序在目标系统无法找到locale文件。打包时添加--add-data参数:
# 替换PythonXX为你的Python版本路径(如Python310) pyinstaller --add-data "C:\PythonXX\Lib\locale;locale" app.py
如果使用spec文件,在datas列表中添加:
datas=[ ('C:\\PythonXX\\Lib\\locale', 'locale'), ]
3. 临时修改ttkbootstrap源码(绕过报错)
找到Python环境中ttkbootstrap/dialogs/dialogs.py文件,定位DatePickerDialog类中调用locale.setlocale的代码(约566行),添加异常捕获:
# 原代码可能为:locale.setlocale(locale.LC_ALL, '') try: locale.setlocale(locale.LC_ALL, '') except locale.Error: locale.setlocale(locale.LC_ALL, 'C')
修改后重新打包程序。
4. 检查用户系统区域设置
让用户打开Windows「设置→时间和语言→区域」,确保当前区域为标准选项(如「中文(中国)」「英语(美国)」),避免使用小众或自定义区域设置。
内容的提问来源于stack exchange,提问作者Göktuğ Gökcen
相关产品推荐
相关产品推荐

