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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 11:17:05