Python:实用抓图工具开发介绍(含需求分析、设计、编码、单元测试、打包、系统测试、发布各环节)
从今年1月份开始学习python以来,一直写一些很小的脚本文件,也主要是为了练习,今天花了些时间,写了一个还算功能齐全的小程序,并完成单元测试、系统测试、及打包等工作。与任何商业软件开发过程一样,小程序从无都有,也必须经历(需求分析、设计、编码、单元测试、打包、系统测试、发布各阶段),所以,借此,结合实现过程中遇到的问题,将此程序各环节做一个简单介绍,算做笔记,如果能对读者有所帮助,就再好不过了。
一、需求分析:
1、标题:
开发一个可以快速抓图的小工具。
2、来源:
自己。
3、背景:
去年在工作中写过三四次软件操作指导书,step by step 的那种,这种指导书中难免会使用到各种操作界面的截图,有时需要全屏图片,有时需要当前窗口、更多时候需要 界面的部分图片,且需要将重点处使用红框做出标记,那时一直使用PrtSc键进行抓图,然后在画图板中编辑一下,最后在贴在word中,操作步骤多且单调,一定程度影响了工作效率。(由于公司不能上QQ,所以QQ相当方便的截图功能没法使用。)
4、价值:
价值不大,网上应该有好多这样的工具,但对个人学习python倒是很有帮助。
5、约束:
仅支持Windows环境上使用。
二、设计:
不分什么概要设计和详细设计了,简单描述一下思路:
通过使用pyhk模块提供的快捷键方式,注册3个快捷键(CTRL+F1/F2/F3),分别对应抓取三种不同的图片(全屏/当前窗口/任意区域),因用户习惯不尽相同,所以程序需要提供需要鼠标操作方式,此程序不是时时都使用,所以不能让它一直占用宽度有限的状态栏资源,故需要做成托盘程序,在托盘图标上通过鼠标右键点击弹出菜单项来进行抓图操作。
画个简单的图:
图1 用例图
三、编码:
这一部分在前面的博文中已经讲过,见《Python:一个多功能的抓图工具开发(附源码)》和《Python:程序最小化到托盘功能实现》,今天对这个程序做了些改动,最主要的是将这两个源码结合起来,并修正一些测试中发现的问题,最终代码如下,不再做详细解释。
1、screenshot.py
2、screen_tray.py
四、单元测试
我使用的IDE为Eclipse+pyDev,功能强大,操作简单、可直接打断点进行逐语句调试,过程不介绍了,贴张图上来。
图2 单元测试
五、打包:
这一部分浪费时间较多,在之前的文章《Python:程序发布方式简介一(打包为可执行文件EXE)》中介绍了py2exe工具的所用,但如文章所述,打包出的exe文件有些动态库是没有被包含的,导致部分机器上执行失败。本次使用了另一个python打包工具Pyinstaller,此工具简单,只需要三步操作,可从http://www.pyinstaller.org/下载此工具。说一下操作步骤:
1、解压下载后的文件到任意目录,如E:\pyinstaller-1.5.1。
2、执行Configure.py。
3、将开发的python程序,相关文件、ico图标文件拷到E:\pyinstaller-1.5.1目录下。
4、执行Makespec.py -F -w -X screen_tray.py,执行后生成规则文件screen_tray.spec,内容如下,可手动编辑。
5、执行>Build.py E:\pyinstaller-1.5.1\screen_tray/screen_tray.spec打包。6、成功后,在E:\pyinstaller-1.5.1\screen_tray\dist目录下生成screen_tray.exe文件。
图3 打包后的文件
7、由于托盘程序需要使用一个ico图标,这个文件我一直没有办法打包进exe,浪费很多时间后放弃,所以在软件发布时在exe文件所在上目录中建立了一个子目录datafile,其中存放图标,用户也可替换为自己的,只要文件名不变就行。程序中也做了些容错处理,如果目录不存在,则从系统目录下加载一个。如下:
8、Pyinstaller使用方便,不足之处是它打包的EXE文件比较大,所以这个小工具有9M大小。
六、系统测试:
直接运行一下看看,依然上图:
1、执行screen_tray.exe,托盘显示正常。
图4 托盘显示测试
2、菜单项目测试,正常。
图5 菜单项测试
3、抓取功能正常(快捷键及菜单项)
图6 抓图功能测试(任意区域)
4、帮助菜单正常。
图7 帮助功能测试(任意区域)
其他测试点就不一一写了,累了。
七、发布:
好像没地方发布,目前就我一个用户。
连同源码一并上传到资源中,感兴趣的朋友可以试用,全当学习交流哈~
地址:http://download.csdn.net/detail/dyx1024/4206549
八、结束:
电脑前坐了一整天,去公园逛逛。
归来,附所拍照片一张,纯属娱乐,与本文无关~~