页面

2009年3月16日

Python GUI用户界面开发

最近用python帮朋友写一个读写二进制文件程序,很快就写好了控制台程序。用过之后感觉不方便,因为涉及到数据检索,在控制台下执行这样的操作太痛苦了,于是便有了编写窗口程序的需求。我也因此开始了我的python gui之旅。
  因为用python的时间不长,对其gui编程没有任何了解,说实话一开始就没打算用python写窗口程序,我觉得这不是python的强项。但世界是在变化着的,呵呵,闲话少叙,进入正题。
  经过一番google,首先进入我视野的是pyqt和wxPython,pyqt是基于目前比较成熟的商业套件Qt的,并且有比较好的开发环境Eric(正是这一点吸引了我)。于是下载qt、pyqt、Eric,好麻烦哦。总算下完了,执行安装吧,蹦出来一提示:"需要安装g++编译器"。太郁闷了,我不就是想开发一个简单的窗口程序嘛,至于这么麻烦嘛,放弃!
  于是转向wxPython,下载完成后执行安装,很快完成。但是却没有找到启动开发环境的地方,反复琢磨才弄明白,wxPython只是提供gui开发的基础库,并没有开发环境。又经过一番搜索找到了几个基于wxPython的工具:boa、wxGlade、wxWidget。
  首先使用boa,这个工具的界面很像delphi,集成了UI设计和代码编辑,但是好像不太稳定,不定什么时候就Crash了,最要命的还是它的代码Auto-Complete功能使用的快捷键是Ctrl+Space,并且没有地方进行修改。后果可想而知,除非用菜单进行AC,总不至于让我修改使用过了N多年的输入法快捷键吧。放弃!
  目光转向wxGlade和wxWidgit,这哥俩不亏都是姓"wx"的,都是只能用来设计UI,不具备代码编辑功能,因此不能算是 IDE,功能好像也都差不多。先装了个wxGlade,在没有文档没有外援的情况下,使用了一下,就一个体会:"控件简直没法定位,没法用!"。于是又装了个wxWidgit,感觉好像跟wxGlade差不多,试用了一下就Uninstall了。
  转了一圈也没有找到个称手的工具,我的心那是哇凉哇凉的!但是程序还得写啊,又一番猛search,发现大家对这个wxGlade的评价还挺好,甚至有人推荐使用。看来是我了解不够,于是又硬着头皮把我已经卸载的wxGlade请回来,仔细了解这个工具的功能,并且做了些尝试,发现用起来确实还挺好,控件的定位只要用好sizer控件,还是挺方便的。但有一个问题,中文支持不太好,如果使用过了中文,再次载入设计好的界面文件时会出错,可能是我了解的还不够深入吧。
  简单介绍一下wxGlade的使用。
  进入程序后,主界面有三个窗口,如下图所示:

首先点击控件窗口的第一个图标,添加一个Frame,接着就可以向新建的Frame中添加控件了。控件的布局使用sizer进行控制,也就是控件窗口里最后两个控件(即BoxSizer和GridSizer)。
  先考虑好界面的布局的大概的样子,让后向Frame里添加sizer,把布局搭建出来,每个sizer里可以包含多个solt,一个solt里只能放一个控件,当然sizer里的solt是可以随时添加和移除的,sizer里也可以包含子seizer。使用过程中多体会试验就好啦。
  界面搭建好后,设置一下输出路径,使用快捷键Ctrl+G就可以生成py代码了。执行一下,界面是不是出来了呢。
  搭建好的界面可以存成文件,以便进行修改时直接就可以调出来之前的设计。不过修改有一点麻烦,因为在界面搭建好后肯定会增加代码,这个时候重新生成的代码,就需要自己手工抠出来新加入的控件的代码,然后填到程序里。这一点也导致wxGlade只能做一些界面比较简单的程序,如果结构很复杂,在写了很多代码后要修改界面,肯定是很痛苦的事情。
  不过话说回来,我觉得如果要开发商业性的桌面程序,py+wxGlade目前还是不能够胜任的,但如果用来开发一些实用性的小程序,凭着wxGlade的简单和python的强大、灵活还是很有杀伤力的。
  最后秀一下我写地程序的界面,臭美一下。

没有评论: