admin管理员组

文章数量:1657962

为什么用Python开发桌面应用程序


为什么用Python开发桌面应用程序

1)wxWidgets是一个比MFC优雅的库,TortoiseCVS用wxWidges而不用MFC,就是因为wxWidgets好用,而不是为了可以移植。
2)Python的面向对象脚本语言编程适合快速界面开发
3)Python在服务器端和客户端都非常有前途,可以形成一个统一的解决方案,这一点明显比Java有优势
4)Python桌面应用程序可以完全编译为本地代码,脱离Python运行环境,这一点比dotnetwinforms都有优势
5)Python可以不受限制的任意调用Windows32 API,所以凡是VC6可以做的事情,Python就可以做

试想一下,现在我们开发桌面应用程序有什么要求?
一、不要附带一个JRE或者CLR的累赘
二、可以快速开发
三、性能要有保证
四、方便的远程方法调用支持
此外如果能够跨平台就最好了

Java前三点都不符合;dotnetwinforms不符合一;VC6不符合二和四,VB6不符合三和四;Delphi7符合前四点;FlashRIA不符合三;Python全部都符合!并且请记住Python是一个完全开源免费的方案! 

 

使用 python开发 windows应用程序 本人以前一直用的是C++,MFC,毕业到了公司以后,公司用 python做流程,我顺便最近研究了一下用 python 开发 windows 应用程序的整个流程,大体如下:

一、开发前期准备1.boa-constructor-0.6.1.bin.setup.exe #一个 wxWidges 的集成开发环境,简单如Delphi,可以直接拖拽控件,并且和其他集成环境不一样, #它不与集 成开发环境的 MainLoop 冲突,用pythonwin,pyScripter 都会冲突,典型 报错就是运行第二次 #程序的时候,直接导致 集成开发环境的强制退出,因为 MainLoop冲突了 2.wxPython2.8-win32-unicode-2.8.10.1-py26.exe #wxPython 库, 提供了用C++写 的 windows 组件库 wx 3.py2exe-0.6.9.win32-py2.6.exe #打包发布工具,将python 写的windows 程序或控 制台程序直接打包成 exe 可执行文件,供用户使用 上述三个软件都是基于 python2.6的,软件版本一定要配套,因为他们默认的安 装路径和 python版本有关系,否则会找不到相关库的存在。 

二、开发 软件安装完以后,打开BOA,哇塞,拖控件真简单,而且属性啥的和 Dephi 差 不多,你只要改改属性,代码会自动生成,它生成的控件很漂亮,记得以前用C++6.0 开发软件的时候,那个控件真丑,都需要我重新用控件库去绑定优化,现在不用了~BOA生成的控件,视觉效果相当好~开发软件速度相当快,再也不用为了软件界面而写太多代码,也不用为了生成一个小程序而生成了很多的文件,python开发的程序,没有多余的文件,而且文件很小。

三、发布很多人都想在自己的软件程序写好以后,发布给其他人使用,一方面不希望自己的代码泄露,一方面以此显出一点成就感, 呵呵,可以使用 py2exe 将你的 windows 程序打包发布了!当然,首先你得写个如下的setup.py 文件: 代码 1 from distutils.core import setup 2 import py2exe3 includes = ["encodings", "encodings.*"] 4 options = {"py2exe": 5{ "compressed": 1, 6 "optimize": 2, 7 "includes": includes, 8"bundle_files": 1 9 } 10 } 11 setup( 12 version = "0.1.0", 13description = "windows program", 14 name = "winsetup", 15 options =options, 16 zipfile=None, 17 windows=[{"script": "myscript.py","icon_resources": [(1, "PyCrust.ico")] }], 18 ) 你可以在命令行下运行:pythonsetup.py py2exe,那么你就会发现你的应用程序出 现在 dist文件夹里了,恭喜你,完成了 windows 应用程序开发! 

python  学习—初次接触 (python,wxpython,Boa,py2exe)

长期使用 java 做 web 开发,有时候需要做一些小工具的话,优先考虑的一般是写ant 或 bat 等脚本,因为开发较快,并且很容易集成到 IDE中。不过有时候一 些桌面程序级别的工具也是需要的,比如说写一些文档生成相关的工具等。这个时候采用java 是不太合算的,因为开发效率不高(虽然有netbeans,eclipse 上也有 swt designer) ,性能也有一点影响,而且还必须要有 JRE 的支持。采用框架倒是开发效率挺高,而且性能也不错,但是 IDE价格较高,程序无法 移植 到其他平台,并且也需要有 CLR 的支持。 没招,就只有找找看其他的编程语言了。 在网上搜索了一下,发现Python可能是一个很好的替代品:面向对象的脚本语 言,稍微修改一下就可以实现跨平台,有 wxPython 这种 GUI 插 件的支持,使用py2exe 等打包工具打包之后的文件大小也远小于同样功能的 java 程序,经过某些 类似于 psyco工具的处理之后,性能也还不错。缺点 也有,就是没有一个可以 媲美 visual studio 的 IDE,不过也有 BoaConstructor 和 eclipse 插件 pydev 这样 的工具,应该可以忍受了。 

而且 python 作为 google的官方编程语言之一,现在在编程语言排行榜上排名前10,那么就肯定是优点胜过缺点的。那么就先简单地试用一下总是可以的吧。断断续续的用了几天时间来了解相关的工具,语法,终于写出了一个最简单的GUI 程序,并且打成了一个程序包,拷贝到到其他 PC 上运行成功。虽然中间 遇 到一些问题,但也学习了很多,所以先写 blog记下来。能帮到其他人就更好了。 

工具准备 python 现在的最新版是3.1.1,而且 3.0 之后的版本的语法与之前的版本相比已经 有了一定的变更,但是相关的 wxpython等还没有支持到这么高的版本,为了能 够使用 wxpython 来编写 GUI 程序,只能放弃新版本了。所以选择了 2.x系列中的最新版:2.6.2,同样 wxPython 也选择了 for2.6 的版本wxPython2.8-win32-unicode-2.8.10.1-py26。然后下载最新的 Boa Constructor:boa-constructor-0.6.1.bin.setup.exe。 (下载地址参见参考资料) 按顺序依次安装:python2.6.2-> wxPython2.8 -> Boa Constructor.※不过之后因为要使用 py2exe 打包的原因,把版本下降成了 2.5 系列。

入门安装好之后,就可以直接使用了。python 自带了一个名字叫 IDLE的开发环境, 不写GUI 程序的话,还是很好用的。打开工具,写一句 print "helloworld",敲回车,马上就可以看到效果了,呵呵,似乎入门很容易。 从网上下载了一份 ppt格式的教程,简单的了解一下基本语法,然后按照教程中的示例代码练习了一下,就算入门了。相比 java 和的庞大类库,python算是蛮简单的,而且本身是动态语言,所以非常的灵活。动态语言是未来的趋势,多 练习点只有好处。 GUI GUI GUI GUI 虽然IDLE 基本上可以满足简单的程序,但我的主要目的还是要做 GUI 程序,所 以上手 Boa 是必不可少的。打开 Boa之后一看,界面确实有点简单, 不过 GUI程序的必备工具(工具栏,属性查看器,编辑器)一应俱全,所以也没有什么特别的。只不过有一点不爽,就是这三个东东并不是像平时使用的 IDE那 样集成在 一个窗口中的,而是分属于三个不同的窗口,在使用"Alt +Tab"键切换的时候,一次只能切换一个窗口,很不爽,不知道是从哪里参照的用户习惯。 参考这篇文章(Boa constructor 简介)中的介绍,写了一个只有一个 button 的界 面出来。 简单的步骤如下: 

1. 先创建一个 wx.App,同时会自动创建一个wx.Frame 

2. 通过 Editor 中的 Frame Designer 往 Frame 中添加了一个 wx.Panel 

3.跟 2 类似的步骤往 wx.Panel 中添加了一个 button 

4. 在 Inspector 窗口中,给 button增加一个单击事件 

5. 在这个单击事件的函数的 event.skip()前面,增加如下代码 (弹出一个确认窗口) dlg =wx.MessageDialog(self, u'yes', u'You got it~', wx.OK |wx.ICON_INFORMATION ) dlg.ShowModal() dlg.Destroy() 

6. 保存以上代码, 然后按F9 运行, 就可以看到一个带 button 的窗口, 点击 button 又会弹出一个 confirm 窗口。OK,至此程序创造成功。

打包 了解了一下,发现有 python的打包程序至少有十几个之多,其中出名的有 py2exe,pyinstaller,pypackage。本次学习选 用了py2exe。下载了 py2exe-0.6.9.win32-py2.6.exe,安装上简单试用了一下。 

首先,先在之前用 Boa创建的目录下新建了一个 mypy.py 文件,里面内容为: from distutils.core import setupimport py2exe setup(windows=["App1.py"]) 

然后执行命令:python mypy.pypy2exe,出现错误。 错误信息如下: error: MSVCP90.dll : No such file or directory查看网友的文章,可以肯定是这一个版本的问题,虽然也有解决的方法,但是并不太好,所以最终选择了直接安装低版本,版本低就相对要稳定的多嘛。于是乎,python-2.5.4.msi,wxPython2.8-win32-unicode-2.8.10.1-py25.exe, py2exe-0.6.9.win32-py2.5.exe 全部 down了下来,并且把之前的版本都替换了。再次试用 py2exe 打包,终于成功的获得了一个 App1.exe 和一堆相关的文件,总文件大小约14M 多,虽然也是很大,不过比起带 JRE 的程序来讲,还是小的多了,可以忍受。然后把程序拷贝到其他机器上运行,又出错了。错误信息是找不到 gdiplus.dll文件。神了,这种事情都发生。到机器上搜索了一下,这个文件在很多软件的安装目 录下都有,在 wxpython的目录下也有的。就是不知道为什么 py2exe 就是没 有 导出来,无语,看来这个版本也不是完美的。忍了,把 guiplus.dll直接拷贝到打包出来的目录下,然后在其他机器上运行,终于 OK 了,看来以后这 一步手动操作是避免不了的了。这次就算完整的走了一圈了。可是怎么看那个 exe 程序的 windows窗口外形的图标都感觉特别不爽。于是到自己的硬盘上找了一个好看的图标放到程序的目 录 下,然后修改 mypy.py 的内容如下:from distutils.core import setup import py2exesetup(windows=[{"script":"App1.py","icon_resources":[(1,"A0052345.ico")]}])执行命令 pythonmypy.py py2exe,OK,exe 文件的图标被成功地替换了。 呵呵,这个最简单的 GUI 程序就算出炉了。 

总结经过 这么一次折腾,终于对 python 以及 python相关的工具有了一些了解。总的来说,python是一种面向对象的解释性编程语言,近似于伪代码的语法,还 是非常易于学习的。而且作为一种黏合剂语言,它的用途也是非常的广 泛。不 过在IDE 方面还稍微有点弱,即便是几个商业版本的 IDE,也不是特别让开发者满意。不过我现在的目的就是可以拿来做一些小的带有界面的工具而已,也不需要太强大的IDE,暂时还是可以满足的。以后要找机会尝试一些 eclipse + pydev。毕竟, 以 eclipse 的强大,相信这个 IDE很有希望成为开源的 pythonIDE中的老大哥。

参考资料:

1. Python_百度百科:http://baike.baidu/view/21087.htm 

2. python: www.python

3.wxpython: www.wxpython 

4. Boa Constructor:http://sourceforge/projects/boa-constructor/ 

5. 啄木鸟 Pythonic开源社区: http://www.woodpecker/ 

6. Boa constructor 简介:http://blog.163/caodixy/blog/static /50940488200951031431510/

7. Python应用发布技术:http://wiki.woodpecker/moin/PyExe

 

 

 

Python桌面应用程序开发的心得体会


 

引言

随着互联网技术的发展和智能终端设备的普及,软件应用逐渐从桌面程序向移动网络化迁移。虽然如此,一些工程应用的软件还是倾向于独立的桌面应用程序的形式。在这里,我将曾经曾经桌面开发的一些心得整理出来,与大家分享。希望能对专业人员有所借鉴,从中找到不一样的开发思路;对于初学者有所帮助,节约一些时间和精力。为什么这么说呢?我的专业是化学工程的一个分支——过程系统工程,在研究生阶段做项目开发过一些软件,走过一些弯路,也有一些收获。在学校最先学习的是用VisualStudio开发C程序,后来做流程仿真的项目,自学了C++,摸索使用MFC类库开发界面。这个项目开发得很辛苦,其中很多时候都在熬夜修改。一方面由于开发经验不足,另外一方面由于需求不明确,但是当时年轻精力充沛,印象中开发软件就是不停地改啊改。最终虽然完成了项目,但是对于开发过程很不满意。俗话说穷则思变,变则通。后来学习了Python语言,并摸索着用这个语言来做项目开发软件,有了之前的经验教训,后来的项目开发顺利了很多。总得来说,语言和工具的优势对于软件开发,尤其是人员很少的项目来说,还是很有帮助的。因此,将使用Python语言开发桌面应用过程中逐渐摸索得到的心得体会总结在这里与大家分享。


 

成长历程

从学校的教育之下,最先学会的就是使用微软的开发工具。

开发环境是Visualstudio,主要类库是MFC


 

后来自学Python语言,并用它用来开发桌面应用。

开发环境为是Eclipse + PyDev

主要用到的模块及工具组合为Python + SciPy + NumPy + wxPython + SWIG + MinGW+py2exe + I18N + NSIS + Subversion

文档方面Epydoc + reStructureText +Sphinx

测试方面doctest


 

下面进行详细说明:

SciPyNumPy进行数值计算方面的开发。

wxPython进行界面方面的开发。

SWIG包装已有的C代码作为动态链接库。

MinGW提供的工具链来完成C代码的编译。

py2exePython代码打包成独立的可执行二进制程序。

I18N进行翻译满足不同的界面字符串变更需求。

NSIS自动将程序打包为安装程序。

Subversion进行版本控制,随时随地进行代码修改或者回滚到之前的功能。


 

Epydoc生成模块的文档,用reST标记语言来写帮助文档,用Sphinx来组织文档。测试方面使用doctest模块。我们都知道文档和测试方面的工作非常重要,但是在实际项目开发中这些方面的投入会比代码开发少一些。在开发人员有限,有的时候可能就只有1名研究生在做开发,此时遇到导师和用户不断催促着要拿出软件的时候,这方面的时间精力的投入就更没法保障。


 

需要指出,这里选择的模块都有替代。比如wxPython是一个优秀的跨平台的GUI框架,是wxWidgetPython绑定。GUI框架很多,其中同样优秀的还有QtPython绑定,pyQt以及pySidewxWidgetQt都是优秀的开发库,选择wxWidegt,还是Qt更多的出自个人爱好。比如我就不喜欢程序代码中有太多的大写字母,而Qt的类库中使用的大写字母比wxWidget多,因此我选择wxPython。虽然如此,但是客观的说,Qt的开发文档更丰富。

同样版本控制软件也有很多,比如CVSMercurialGit等等。

二进制打包程序有很多,比如与py2exe类似的PyInstallercx_Freeze等,也可以使用Pyrexshedskin先将Python代码翻译为C/C++代码,然后再编译为可执行的二进制文件。


 

看到这里你应该已经能推测到本文覆盖的内容了,如果你还是比较感兴趣,那么欢迎继续阅读,如果涉及的内容,你都比较熟悉,那么大可不必再在这篇文章上花费时间啦。


 

Python震撼

最近正在研究FlashRIA,经人推荐到sf上面下载了一个开源免费ASIDE,叫做SEPY,不经意之间发现SEPY竟然是用Python写的!于是又下载了SEPY的源代码观摩了一下,结果更吃惊,惊叹Python做图形桌面应用程序代码竟然如此简洁,表现力竟然如此丰富,如果不是特别留意,绝想不到SEPY竟然不是Windows本地代码编写的软件。就此关注了一下Python桌面应用程序开发,这一下更加吃惊,发现现在使用python写的桌面应用程序已经非常丰富了,sf上面一抓一大把。然后还找到了Python的几个IDE,其中BOA给我极大的震撼,安装跑起来一看,俨然就是Delphi!可视化的托拽方式放置桌面控件,完全面向对象的编程。

经过半天时间简单的了解,我得到了如下的结论:Python桌面应用程序的前景非常好,而相形之下,已经事实上宣判了Java做桌面应用程序的死刑!

Java 做桌面应用程序,无法脱离JRE,这是一个很大的限制,你必须下载安装很大的一个JRE运行环境,并且一旦安装那就涉及到了JRE版本的问题,你基于JDK5.0开发的应用就没有办法在人家JRE1.4上面正常的跑。虽然JWS可以做到应用程序的Onlineupdate,但是终究无法做到JRE的online update!

此外,Java的图形API严重分裂为Swing和SWT。Swing是一个扶不起的阿斗,bug很多,做出来的界面不伦不类,而且无法处理一些类似系统托盘之类和操作系统关系比较大的功能,并且性能非常糟糕,可以这样说,Java成也Sun,败也Sun;SWT要比Swing好得多了,但是可惜的是,Sun拒绝接受SWT,这样就使得SWT始终处在地下状态,得不到良好的发展。并且SWT也无法脱离JRE运行,而且API直接封装操作系统调用,很多地方有MFC痕迹,没有办法OO起来,受到很大的限制,但不管怎么说,SWT总算是给Java图形编程留下了一线希望。

Python从一开始就是走SWT的思路,绝不愚蠢的自己去
 构建桌面组件,而是用C++编写组件,用Python去调用,这样的思路走到现在,已经有了良好的回报。现在Python编写的应用软件,可以脱离Pthon运行环境,单独编译为pyd(PythonDLL)和exe直接运行在Windows操作系统上。其速度表现和内存占用两个方面都要比Java好,就我现在的用下来的感觉,和VB开发桌面应用程序,或者和dotnet开发桌面应用程序处在同一个级别。

其实现在Windows桌面应用程序开发处在一个告别旧的时代,但是又没有迎来新的时代的尴尬时期:MS力主推出的dotnetwinforms并没有取得预期中的成功,至今仍然使用者寥寥,推了那么多年都没有普及开来,并且又是注定的一个过渡时期技术,这些都说明winforms不会有更好的前途;而MS下一代桌面应用技术尚未拉开神秘的面纱,至于普及,也是n年以后的事情了;所以现在就很尴尬,经过几年Internet Application和dotnet winforms的喧嚣之后,传统的DesktopDeveloper又重拾昔日的Delphi利器,然而连Borl
 and自己都不再对自己保存足够的信心,而去搞Delphi去了,于是大家只好拿出来怀旧的Delphi7,VB6,VC6来应付桌面应用技术开发

在有像BOA这样IDE的强力支持下,Python也当仁不让的加入了这一行列,以现在的桌面应用开发技术来说,Python开发效率,执行性能,学习曲线方面全面不落下风,甚至在很多方面有优势,特别是在跨平台这一点上,做到了Java多年都做不好的方面。由于Python的出色表现,我已经找不出来用Java编写桌面应用程序的任何理由了。我可以理直气壮的宣布,Java桌面应用开发已死!

Python
 服务器应用开发方面,也同样非常强大,不过考虑到Java在服务器领域多年的成绩和诸多大公司的投入,显然还无法取代Java的地位,但是我可以预言,将来淘汰Java的必定是Python,而不是dotnet!

随着RIA和RCP的流行,大家都在寻找下一代客户端技术。MS自成体系的一套自然也是其中之一,但是离问世还有几年,离普及就更遥远,在当前出现的所有的技术当中,我断定两种技术肯定会成为主流:

Flash会成为RIA的主流;Python会成为RCP的主流!

本文标签: 什么用应用程序桌面Python