我最近修改了一个使用wxPython小部件的Python GUI应用程序。在过去的六七年里,我曾经试验过Python,但这是我第一次做GUI方面的工作。我对Python语言本身非常喜欢,这对于一般编程任务来说确实是生产力的大幅提升,与我平时使用的Delphi/ObjectPascal编程相比是一种有趣的变化。我想将所有工作都转到Python上。
但是,wxPython相对于Delphi的VCL或.NET的WinForms来说是一个巨大的倒退。尽管Python本身提供了较高抽象级别的优势,wxPython的抽象级别却比VCL低得多。例如,我浪费了很多时间来让wxPython列表对象按照我的意愿进行操作。仅仅添加可排序列就需要进行几个代码密集型的步骤:一个是创建和维护一个提供实际排序顺序的阴影数据结构,另一个是使其能够在列标题中显示图形排序方向三角形,还有一些我记不清楚的步骤。而使用我的Delphi网格组件只需设置一个属性值,就可以完成所有这些容易出错的步骤。
我的结论是:虽然Python通过提高一般编程的抽象级别提供了生产力的大幅提升,但wxPython的抽象级别比Delphi可用的GUI工具低了几个级别。最终结果是:使用Delphi进行GUI编程比使用Python要快得多,而且Delphi的界面仍然更加精致、功能更齐全。在我看来,并不夸张地说,1995年的Delphi GUI编程比2009年使用wxPython的Python GUI编程更为先进。
我对其他Python GUI框架进行了一些调查,但似乎没有比wxPython更好的选择。我还对wxPython的GUI表单构建器进行了一些最基本的调查,这可能会让事情变得更好一些。但是据大多数报告称,这些解决方案存在缺陷,即使有一个很棒的表单构建器,也无法解决我对wxPython的主要抱怨,即它具有较少的功能,并且通常需要您在比我使用Delphi VCL时更低的抽象级别上进行GUI编程。对于那些建议的Python GUI开发解决方案进行简要调查(http://wiki.python.org/moin/GuiProgramming )对于习惯于Delphi或.NET的人来说,这实在有些令人沮丧。
最后,我有几个问题。
首先,我是否遗漏了某些东西?是否有一些Python的GUI开发解决方案可以与VCL或WinForms编程相媲美?我并不一定要求它完全达到Delphi的VCL水平。我只是希望能找到一个处于同一联盟的东西。
其次,IronPython是否可以成为可行的方向?我大部分时间都试图避免沉迷于.NET开发,但也许IronPython给我一个理由终于屈服。即便如此,IronPython是否完全集成了WinForms,还是需要使用C#或VB.NET支持表单本身?对我来说,看起来在SharpDevelop和MonoDevelop上肯定是这种情况(即IronPython无法用于设计时GUI构建)。VS.NET是否完全将IronPython与GUI构建集成?
在我看来,如果有一个出色的Python GUI构建解决方案推出,Python 实际上可能会像Visual Basic在1990年代初期那样“攻占世界”。 这次随着Python,我们将拥有一种全新的、快速的、跨平台的和开源的图形用户界面编程范例。企业不会对此感到兴奋吗?是的,我知道,现在主要集中于Web应用程序,因此不会像VB曾经所做的那样引起同样的变革。但我并不认为GUI编程会消失,而且我希望有一个漂亮的现代、开源、高级别的解决方案。