试用wxPython

阅读更多
这两天捎带看了一下wxWidgets的Python版本wxPython,不知道是不是因为没在C++圈子里转过,我总感觉wxPython的名气要比wxWidgets本身都要响亮了。还好,这相互之间互不冲突,wxPython只是wxWidgets的python wrapper,核心还是C++ code,这也是Python的一大特点,所以也不怪Python的库那么多,功能那么强大,涵盖的面那么广。

Python的图形库的选择有不少,首当其冲的是随Python一起分发的tcl/Tk,此外还有GTK和QT各自的pyGtk、pyQt,再一个就是wxPython。除了pyQt以外我都用过了,谈谈感受吧。

用Tk写的东西相对最多了。Tk最直观的特点就是难看,它的控件外观是自身的,与操作系统不太协调,对于一个GUI Toolkit来说,这个简直就是不能原谅的问题。至于其它,我倒是没有感觉到有什么不方便,而且和Python一起分发是它最大的优势。wxPython.In.Action上评价Tk是一套老旧过时的东西,而且控件太少,不过这主要是因为wxWidgets的控件确实比较丰富。

pyGtk是GTK的Python wrapper,它相对使用起来就比较麻烦了。在Linux上基本上发行版都会自带相关的库,但是要移植到Windows上就不是一般的麻烦了,首先要装GTK Windows的Runtime,然后还要再装pyGtk、pyCario等库,弄不好还跑不起来。pyQt我想也与之类似。

wxWidgets就不一样了,它在各个系统上都使用本地的界面(在Linux里是Gtk的),安装只要把wxPython的包装上就可以了,零配置。

编程方面,wxPython和Tk非常类似,几乎就是一样,都是采用mainloop的形式,控件的创建、事件的绑定方法都是大同小异。但是wxPython确实要更加丰富,更加强大一些。举个简单的例子,wx中专门有一个StatusBar控件,虽然别的图形库里实现也不麻烦,但是这个省去了很多细节上的麻烦。

wxWidgets除了C++、Python的版本还有其它语言上的移植版,比如wxPerl、wxLua,基本上都是C语言系的。Java平台上似乎有过两个项目曾经试图把wxWidgets移植过来,分别是wx4j和jwx!,不过这两个项目似乎都没有做大,发展情况也不是很好。当然,Java上有非常相似的SWT,也便不太需要wx了。不过要说起SWT,和wx倒是也有很多非常相似的东西,比如那个用bitmask的方法来给一些属性赋值,SWT上:

int code = SWT.DIALOG_TRIM | SWT.MIN; 
Shell shell = new Shell(display, code); 
ScrolledComposite scrollPane = new ScrolledComposite(shell, 
        SWT.H_SCROLL|SWT.V_SCROLL|SWT.BORDER); 


wx上:

style = wx.DEFAULT_FRAME_STYLE ^ (wx.RESIZE_BORDER | wx.MINIMIZE_BOX |
wx.MAXIMIZE_BOX)
frame = wx.Frame(self, None, -1, "Test", {0,0}, {10,10}, style)


也许是因为同根生吧。

你可能感兴趣的:(wxPython,Python,Linux,Qt,Tcl)