1 项目描述
为了减轻妹子工作中处理Excel的辛苦,用python写了几个处理xlsx的代码,分别完成一些独立的任务,如根据考勤记录判断每天未来、迟到、早退的名单,实现两个复杂xlsx文件的单元格对比,等等。但妹子毕竟是文科生,直接提供py代码并且要求在命令行中调用,还是极度的不友好。所以这次希望能够完善一下,主要实现三个目标:功能整合、提供GUI、打包成exe。
仍旧使用python,经过一番调研决定使用pyqt开发GUI。
2 安装
我的本本是mac,一直以来也觉得mac(或者linux)比windows更适合于开发,所以这次的代码工作依旧在mac os上进行。
为了使用pyqt,需要在mac上具备这些条件:
- Xcode:如果系统没有自带,那就装一个吧,mac os专属的IDLE;
- Qt:UI开发工具;
- SIP:将C++和python连接;
- PyQt:将python和qt连接。
2.1 Xcode
这个不用多说了,用过Xcode开发过的人都应该听说过,没有的话装一个即可。
2.2 Qt
到Qt官网上下载安装即可,如果不清楚使用哪一个,可以考虑我的选择。
2.3 SIP
下载SIP,这是我的选择。
下载完毕后解压并在命令行中进入该目录,执行以下代码。
cd sip-4.16.8/
python configure.py
make
sudo make install复制代码
2.4 PyQt4
当然现在pyqt最新的版本应该是5点几了,不过我的需求应该pyqt4就可以满足。
下载pyqt4,这是我的选择。
下载完毕后解压并在命令行中进入该目录,执行一下代码。
cd PyQt-mac-gpl-4.11.4/
python configure.py
make
sudo make install复制代码
2.5 参考
完成以上四个步骤,便可以在mac os中使用pyqt4了(当然,你还得装了python),进入python然后试试import PyQt4吧,如果能成功导入说明一切顺利。
3 开发
我的项目托管于Github,example文件夹里面包含了一些pyqt4的教程例子,My_dear.py是最终的程序代码,整合了考勤文件处理和Excel表格对比两个功能。界面看起来大概是这样(界面求不吐槽,毕竟不是产品,不用在乎设计,功能实现就可以啦!),左边的列表里的两项即对应不同的标签页。
pyqt4的教程例子主要来源于这里。
4 打包
如果只是python代码的话,别人的电脑上如果想运行就需要配置同样的环境,所以最好打包成产品,别人运行起来只需要一个文件即可。
我使用PyInstaller进行项目打包,在mac os上使用pip即可安装PyInstaller。
sudo pip install pyinstaller复制代码
接下来打包成在mac os上可以直接运行的app格式,第一行命令生成打包中间文件My_dear.spec,第二行代码处理该文件并完成打包。
pyinstaller --windowed --onefile --clean --noconfirm My_dear.py
pyinstaller --clean --noconfirm --windowed --onefile My_dear.spec复制代码
当然也可以打包成pkg或dmg等格式,参考这里。
可这不是我要的效果,因为这个最终是要给妹子用的,妹子单位上班的地方用的台式机装的却是windows,所以平台差异的问题这时候浮现了出来,一开始就弄错了开发平台,因为mac os上开发的程序是不可能打包成exe的= =。
5 出奇简单的Windows
所以转战到实验室的windows台式机上再次开发,却发现这次windows的开发流程比mac os简单多了。在windows上,有了python,如果想使用pyqt4,安装一个软件就够了,里面包含了你需要的一切!
下载地址在这里,直接根据你的python版本和位数选择exe即可。
安装过程中会默认选择系统python安装路径,安装完毕之后就可以运行My_dear.py文件了。
至于windows下的打包,同样可以使用PyInstaller。和mac os不同的是,mac os中PyInstaller是python的一个包且可通过pip下载,而在windows中则需要人工下载源码。
下载链接在这里,下载完毕后解压即可。在cmd中进入该目录,使用以下命令即可完成打包(为了方便可以把My_dear.py也拷贝至该目录下)。
python pyinstaller.py [opts] My_dear.py复制代码
其中opts为可选参数,主要包括:
- -F,-onefile:打包成一个exe文件夹;
- -D,-onedir:创建一个目录,包含exe文件夹,但会依赖很多文件(默认);
- -c,-console,-nowindowed:使用控制台,*面(默认);
- -w,-windowed,-noconsole:使用窗口,无控制台。
所以对于我的GUI,参数的选择是-Fw。
6 总结
在本次开发过程中,出于个人习惯选择了mac os作为开发平台,后面由于导出exe的需求在windows上再次做了尝试。总的来说,接触并初步熟悉了pyqt4在mac os和windows上的部署和开发,以及用PyInstaller打包py程序的方法,还是收获良多的。