python/gui-pygtk/pyqt/tkinter/wxpython的选择/区别/比较最适合你的

python GUI 的选择
Tkinter
1 Tkinter 似乎是与 tcl 语言同时发展起来的一种界面库。tkinter 是 python 的配备的标准 gui 库。Tkinter 提供了一些简单的接口。和一些简单的窗口 按 钮等。优点是简单,易用。缺点是功能较少。 Tkinter 的安装:yum install tkinter yum install python-imaging yum install python-tools Tkinter 的使用:Tkinter 的使用非常简单,只要用 import Tkinter 将库导 入即可。 总结: 值得注意的是, 我发现 Tkinter 一定要在系统自带的 python2.4 版本 上,才能实现导入。在我安装的 python2.7,不能够实现导入。在这里,我也 发现了 centos 系统的一些缺陷,centos 系统自带的软件会比较旧,但是缺不 能够用 yum 来更新。自己编译安装过程中,会有许多错误。根据我网上查找 的资料了解,要自己重新配置 yum 的第三方库,因为公司本身已经不提供更新。

WxPython
5 WxWidgets 应该算是近几年了比较流行的 GUI 跨平台开发技术了。 wxpython 的功能上面要强于 tkinter,她提供了超过 200 个类,面向对象的编程 风格。相比 Tkinter,Wxpython 的功能强大了很多。 WxPython 的安装:下载 wxpython 的 RPM 包进行安装 WxPython 的使用与 Tkinter 类似,都是直接进行导入 import wx 将库导 入即可。 总结:对于 Wxpython 只是提供 gui 开发的基础库,并没有开发环境。又经过 一番搜索找到了几个基于 wxPython 的工具:boa、wxGlade、wxWidget。但是 我认为这样做 GUI 开发,不够方便。

PyQt
9 PyQt 是一个创建 GUI 应用程序的工具包。它是 python 编程语言和 Qt 库 的成功融合。 库是目前最强大的库之一。 Qt PyQt 是由 Phil Thompson 开发。 PyQt 实现了一个 Python 模块集。 PyQt 的安装:PyQt 的安装涉及到的东西比较多。因为编译 PyQt 要用到 qmake 工具, 所以首先要安装的是 Qt 的编译环境。 然后由于系统自带的 sqlite3 数据库和 python 版本太旧。 先要更新版本。 所以我安装了 sqlite3 的最先版本, 和 python2.7.(必须先安装 sqlite 数据库,再看装 python) 。然后是安装 PyQt 的依赖文件 sip,然后就可以编译安装 PyQt。 由于要 PyQt 有专门的编辑器 eric4,所以我们还需要安装 eric4.安装 eric4 前,必须先安装 QScintilla-gpl-2.7,再安装 eric。但是在我成功安装后却始终无 法打开 eric4。 总结:由于我学习的是 QT 编程,所以我在选择 python 的 GUI 开发时, 第一个选择的便是 PyQt,因为用相同的 Qt 库会比较好入手。而且 PyQt 的功 能很强大,而且根据我在网上找到的资料,大多数人都认为 PyQt 有着不错的 发展前景。 但是我没有能成功安装 eric 的编辑器环境。 但是我在寒假还是想尝 试一下 PyQt 的开发环境的安装。一来这样可以节省很多时间,二来,Qt 毕竟 是我比较熟悉的开发环境,而且支持各种平台。

PyGTK
12 PyGTK 让你用 Python 轻松创建具有图形用户界面的程序.底层的 GTK+提供了各 式的可视元素和功能,如果需要,你能开发在 GNOME 桌面系统运行的功能完整 的软件。PyGTK 真正具有跨平台性,它能不加修改地,稳定运行各种操作系统之 上,如 Linux,Windows,MacOS 等.除了简单易用和快速的原型开发能力外,PyGTK

还有一流的处理本地化语言的独特功。 PyGTK 的安装:首先 PyGTK 你要安装 GTK 库,和 glade 编辑器。我在网上 了解到 GTK 库已经到了 3.6.x 的版本,glade 也已经有推出了 glade3 的版本。 但是我在 centos 上安装都没有成功。因为他们依次依赖的文件太多,出现了 一些我暂时还解决不了的问题。后来我只好采用系统自带的旧版的 GTK 库, 并安装了 glade2 glade 的使用非常的方便,他类似 QtCreate,可以直接进行布局。并别他 有很全面的控件。并能够绘制出很漂亮的界面。而且保存的代码文件时用 xml 写的。 总结:glade 十分容易就行 GUI 的绘制。并且有着丰富的控件,而且支持 LGPL 协议。而且他还支持各种鼠标、键盘等事件。只需要用 python 来调用它 生成的文件。

很多python开发人员, 在选择界面库的时候都会犹豫一段时间, 到底是选择tk, wxpython, pygtk, pyqt, 还是什么其他奇怪的解决方案. 这里, 我建议, 不要多想了, 节省你的时间和精力, 选择pyqt.

很多开发人员, 在选择界面库时候(至少是你能够选择的时候)都会犹豫很长时间, 到底是MFC, winform, WPF, flash, swing, VCL(还有人知道delphi吗), 还是什么其他奇怪的解决方案, 这里, 我建议, 不要多想了, 节省你的时间和精力, 选择pyqt.

好了, 广告时间结束, 这里说明理由:

  • 为什么python?
    • python是最好用最好学的编程语言(没有之一, VB不够好用)
    • 根据GUI的本质思维, 只有动态语言才能做到那么强的灵活性. 所以C/C++/java什么的不方便开发. 不然你动态生成页面试试?
    • 快速开发. 同样的功能, python的代码是其他语言的若干分之一. 代码量少了, 开发速度和质量都提高了.
  • 为什么Qt?
    • 工业级别的界面库. tk, wxpython都太简陋了, 不堪大用. wxpython还有性能问题. (by Jimmy Kuu)
    • 跨平台. VCL, winform, WPF, GTK可能好用一些, 但是跨平台试试? 以后一辈子和某个平台挂钩了. (好吧, GTK, mono可能多平台.. 但是没有pyqt好用)
    • 简单直观的事件处理方式. 只需要把一个signal插入到一个slot里面就好了, 并且是热拔插. callback机制已经过时了.
    • 性能很好, 足够工程使用. 一个实际的例子: linux下面的桌面系统KDE是基於Qt的.
  • 虽然pyqt很好, 但是还有其他需要注意的方面
    • 如果你是开源项目, 随便用. 但是如果是商业闭源, 那需要给 riverbank 他们交费, 一个开发者350英镑, 还是蛮划算的(比起开发时间来说). 或者你可以考虑 pyside?
    • 发布. 打包后的pyqt程序, 10M左右, 如果你对空间要求很严格的话, 就不适合了. 但是现在这个网络时代, 这应该不成问题. QQ都非常大了..
    • 性能. 如果你要画实时图片, 3d什么的, python恐怕太慢了, 老实用回C++吧.
    • 移动应用. meego 还早, 好像可以在android上面写python, 但是pyqt.. 哈哈哈.
    • web2.0. 好吧, jquery是你的武器. 写javascript去吧. 还有flash..

还有我一些其他的看法:

  • Qt的designer是杀手级的. 在linux下面. glader什么的都去死吧.
  • tk8.5好像解决了中文问题. 但是控件是不是太少了? 不够用阿.
  • wxpython太丑了. 哪里比得上Qt支持的qss方式动态设置风格.
  • pyGTK? 没用过. 有时间看看.
  • MFC sucks.
  • delphi. 编译飞快. 但是动态生成界面? 当年研究了很久..
  • WPF: WTF..
  • winform. 他们说不好, 我觉得还好吧?
  • android/iOS. 好吧, 我落伍了.

既然决定了就不要随便换,PySide也有自己的优点,速度快,界面可定制性强(stylesheet),webkit,作简单界面时比wx方便(因为有designer),以后对移动的开发可能支持更好。
东西都差不多,换来换去太麻烦,熟悉了都好用,我选定的东西不到万不得已不会换,ide:ulipad,webframe:django,
gui:PySide,其它的再好我也不去看。

2011/12/14 Lerry <[hidden email]>:

> 看到这儿我也有点动摇了,我是经过反复对此才决定学PyQt的,算是刚入门,也感觉PyQt太麻烦了 不够Pythonic
>
>
> On Dec 14, 2011 6:50 PM, “Flya Flyaa” <[hidden email]> wrote:
>>
>>
>> wxPython和PySide我都写过不少代码,wxPython要易用的多,PySide很烦,很多时候不得不继承类,象写C++程序一样。我是为了webkit不得不转到PySide上。
>>
>> 2011/12/14 Shuge Lee <[hidden email]>:
>> > 为了跨平台,而选择 PyGTK/PyQt/PySide/Tkinter/wxPython 是错误的。
>> > 每个 framework 在不同的平台都可能会有各种各样的总是,比如 PyGTK 在 Mac OS X 下的 i18n/l10n/input
>> > method 有问题;
>> > Tkinter 在 X11 下样式有问题,做桌面应用部分控件你找不到,找到了也没有人继续维护。
>> >
>> > 如果你的应用只跑在 Windows 上又希望用 Python 写 GUI,就选择 wxPython,
>> > GNOME 则是 PyGTK
>> > KDE 则是 PyQt/PySide
>> > Mac OS X 则是 PyQt/PySide/Tkinter
>> >
>> >
>> > 我只用 QtWebKit 做过 Firefox + AutoProxy 替代品,但是失败了,当时没有深入研究过 JavaScript
>> > runtime 的问题,
>> > 只记得在 Mac OS X 上的 stable Qt + PyQt webkit 是支持 JavaScript runtime(我用
>> > jQuery测试过)。
>> >
>> > On Dec 7, 9:53 am, Jimmy Kuu <[hidden email]> wrote:
>> >>
>> >> 不意思哦,亲,我的PyQt版本是4.8.4的,在Mac和Windows上都测试了下,没有出现这个问题,而您用的版本是4.8.3,我怀疑是WebKit的版本的问题,如果您不怕麻烦的话,可以安装个4.8.4的版本试试噢。
>> >>
>> >> 这样语气能接受吧? ^_^
>> >>
>> >> 在 2011年12月7日 上午1:25,Ning <[hidden email]>写道:
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >>
>> >> > 说话的语气有点受不了……
>> >>
>> >> > 在 2011年12月6日 上午9:41,Jimmy Kuu <[hidden email]>写道:
>> >>
>> >> >> PyQt4.8.4在Mac和Windows下都没有出现这个问题。可能是WebKit版本的问题。
>> >
>> > –
>> > 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
>> > 规则: http://code.google.com/p/cpyug/wiki/PythonCn
>> > 发言: [hidden email]
>> > 退订: [hidden email] (向此发空信即退!)
>> > 详情: http://code.google.com/p/cpyug/wiki/PythonCn
>> > 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>> > 强烈: 建议使用技巧: 如何有效地报告Bug
>> > http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
>>
>> –
>> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
>> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
>> 发言: [hidden email]
>> 退订: [hidden email] (向此发空信即退!)
>> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
>> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
>> 强烈: 建议使用技巧: 如何有效地报告Bug
>> http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
>
> –
> 来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
> 规则: http://code.google.com/p/cpyug/wiki/PythonCn
> 发言: [hidden email]
> 退订: [hidden email] (向此发空信即退!)
> 详情: http://code.google.com/p/cpyug/wiki/PythonCn
> 严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
> 强烈: 建议使用技巧: 如何有效地报告Bug
> http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html
… [show rest of quote]


来自: python-cn`CPyUG`华蟒用户组(中文Python技术邮件列表)
规则: http://code.google.com/p/cpyug/wiki/PythonCn
发言: [hidden email]
退订: [hidden email] (向此发空信即退!)
详情: http://code.google.com/p/cpyug/wiki/PythonCn
严正: 理解列表! 智慧提问! http://wiki.woodpecker.org.cn/moin/AskForHelp
强烈: 建议使用技巧: 如何有效地报告Bug http://www.chiark.greenend.org.uk/%7Esgtatham/bugs-cn.html

Remove Ads
Lerry-3
Reply | Threaded | More star
Dec 15, 2011; 9:33am
Re: [CPyUG] Re: [PySide][PyQt] 我写了一套 PySide demo/example
Lerry-3
134 posts

Top Down