Python+wxWidgets快速开发桌面小程序

| No Comments | No TrackBacks

    作者:江南白衣

    充分体验到知识循环再用的好处,原本对PythonwxWidgets没有接触的,天黑天亮之间,已经作了一个半成品的桌面程序出来。

    1.选型
     通常选型之后,都会迫切的告诉别人自认为正确的原因,这时候路过的人就比较不幸了。
    我选Python和wxWidgets,是因为.......

     因为是发布到网上的小程序,要它很小,Java和.Net这两个还算当红但要装虚拟机的笨家伙最先out了,而Python在py2exe之后压成rar才3M,如果有心思还可以弄得更小。
    选wxWidgets是因为它可以通行于Windows,Linux两个位面,另外Fox也能通用,不过wxWidgets是像SWT一样用Native Widgets的,在WinXP上比较好看。
     用Python而不是C++,是为了快速开发。当然,心底里其实是贪好玩。本来喜欢Ruby的语法更纯洁一些,可惜wxRuby已经太久没更新了。

   2.wxWidgets
   所谓GUI框架,万变不离下面几点:
   1.框架结构
      拿个HelloWorld一看就懂,又是Application->Frame->Menu 的标准架构。

   2.wxWidgets用法
      来来去去还是Text框,选择框,按钮几个老面孔,在wxPython上把wxPython2.6-win32-docs-demos-2.6.1.0.exe档下载回来,就有C++版本的API手册与python版本的每个widgets的Demo Code。

   3.控件与页面的Layout
      一种方式是C# Winform和Swing那样在程序里生成组件和layout,经历过SWT手写代码画页面的折磨,再看到一层又一层的Container代码(wxWidgets里是Sizer)已经不觉得麻烦了。也有所见即所得的工具如BOA,不过毕竟没有Visual Studio for WinForm那么好,难以真正使用。
      一种是像Delphi, VC或未来的XAML那样把控件和layout记在XML文件里。但我没有用。

4.事件分发机制
     像 EVT_BUTTON(self,ID_UPLOAD, self.onUpload)这样的代码,挺简单的。

   可见,只要有过GUI编程的经验,再学wxWidgets 很容易。
参考书:《Cross-Platform GUI Programming with wxWidgets》
                   《wxPython in Action》

   3. Python
   手边放一本Python的参考书,只要对动态语言有点感性认识,对着Sample Code能能猜就猜,猜不到就拿chm版的参考书来索引,也很容易入门。

   最难的地方发生在遍历目录,那时候已经有点困了:

for root, dirs, files in os.walk('C:/projects/'):
    
print sum(getsize(join(root, name)) for name in files)


    这是什么见鬼语法阿!!
     原来os.walk('C:/projects") 的返回值是一个tuple。在C++ Boost库中接触过这个概念,平常函数都只能返回一个值,而tuple可以让你返回多个(这样就不用利用传址的参数来返回啦),所以就有了for root,dir,files in os.walk()这样的句子。
    还有 print join(root,name) for name in files,原来python还有这种把闭包写在for的前面的简写法。

    IDE最后还是用了Eclipse的插件PyDev,毕竟Eclipse看着比较舒服,其他编辑器做得那么难看,怎么还好意思收钱。

4.美化界面  
     因为wxWidgets用的是native widgets,不像Delphi,C# 和Swing有专门的look and feel 美化控件,所以美化的主要方式是为Toolbar和Button配上好看的图标,还有修饰整个软件的配色。
     推荐Tango一个图标库:http://tango-project.org/ to make open   source software beautiful...说出了我的心声啊,"顶尖儿的程序员必有完美主义艺术家之倾向。",目前的图标还不多,迅速更新中。

No TrackBacks

TrackBack URL: http://www.wujianrong.com/mt-tb.cgi/2903

Leave a comment

About this Entry

This page contains a single entry by kevinwu published on July 25, 2007 11:24 PM.

J2EE实用技巧大全 was the previous entry in this blog.

Python IDE is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.