经过约一周的业余时间,大约每天2-3个小时吧,我从一个tkinter的小白,终于做出了第一个应用。有几点体会如下:
1、一定要读源码,读源码,读源码。重要的事情说三遍。因为tkinter的源码体现了设计思想,另外网上查询到的资料基本都停留在最基本的功能和特性上,但是你的实际需求是复杂的,往往难以简单的实现,当多次在网上找不到答案时,特别有挫败感。而通过一些近似的组件源码直接继承或者拷贝修改,就可以实现自己想要的效果。
2、使用最小的测试单元。网上查到的一些代码,要建立一个临时场景测试代码,因为每个人的需求不一样,写的时候侧重点也不一样,有很多细节是没有体现的,导致你直接在你的大程序中使用时,带来的问题需要反复查找,这不是一个高效的方法,所以要用最小的测试单元来做。
3、完成比完美重要。主要是受时间、空间限制,先将功能实现,再在此基础上进行代码的优化,总想一个完美的架构,可是连最基本的功能都没有实现,有时就是空想。
先举一个简单的小例子说明本算法的思想。比如任意给定一个数x,x<251226,问这个数是由几个25,几个12,和几个26组成的。我们的算法就是用x除以25得到商和余数,然后用商除以12,得到商和余数,再用商除26得到余数。那么每个余数就是相应的值。
我们计算的方法也是基于这个原理
自定义IntSpinbox,继承Spinbox,因为我要求输入的必须是数字,而且数字的格式要符合要求,而如果用IntVar,其对于输入的整数异常不能直接处理,所以我通过继承Widget控件,自己做了一个输入数字的控件。当时也在baidu找了很多资料,但是网上的都是很泛,没有匹配我的需求的,而且无法访问国外的技术网站,于是自己定义一个。
自定义一个ScrollTextFrame,将滚动条控件和Text控件组合,形成一个新的控件,这样使用起来方便,而且可以复用。
自定义一个ProcessBarDialog,继承Toplevel控件,用于显示计算的进度条,
类ThreadWithReturnValue(网上找的),用于开启一个新线程显示进度条,而算法在主线程执行。
代码的内容过多,直接给地址吧,就不多罗嗦了。
WorkHourCalculator
如果想打包成exe文件,可以安装pyinstaller
pip3 install -r requirements.txt
然后利用命令pyinstaller -F -w main.py打包成一个exe文件。