tkinter打包执行异常
一、背景
tkinter界面中通常会用到日历控件,常用的是tkcalendar,这个包在编译器中使用时一般没什么问题,但是在打包时会出现问题,无论是Pyinstaller还是Nuitka,网上能查到的都是Pyinstaller解决方案,这里写一下Nuitka的解决方案。
二、tkcalendar问题1——Calendar与python自带的calendar冲突
使用这个包通常会有这样一句:
from tkcalendar import Calendar
你会发现这个包编译测试没问题,但打包是就会报错,是因为Calendar这个类(在tkcalendar\calendar_.py下面)会跟python自带的calendar包冲突。
因此要想用,最好对这个类改名,我这里改成CCalendar。
注意有几处相关联的地方需要修改,如果不知道,可以直接编译程序,它会逐个报错说no module named ‘Calendar’,因为他们调用的Calendar类已经被修改为CCalendar类,没有Calendar类了。
(1)在你调用的程序里面修改:
(2)去tkcalendar\calendar_.py里面修改:
(3)去tkcalendar\dateentry.py里面修改:
(4)去tkcalendar_init_.py里面修改:
三、tkcalendar问题2——babel包相关问题
运行仍旧报错,这次说是no module named ‘babel.numbers’,但是babel下面是有numbers.py,试了各种方法,最后直接在起初调用tkcalendar的地方加上一句
再打包,就能正常运行了。