问题re:使用Python进行GUI编程的当前状态

时间:2009-04-01 21:53:15

标签: python user-interface

我最近做了一些修改使用wxPython小部件的Python gui应用程序的工作。我已经在过去的六七年中尝试过Python,但这是我第一次使用gui进行任何工作。我对使用Python的gui编程的当前状态感到非常失望。我非常喜欢Python语言本身,这是我习惯的Delphi / ObjectPascal编程的一个有趣变化,对于通用编程任务来说肯定是一个很大的生产力提升。我想转向Python一切。

但是wxPython是Delphi的VCL或.NET的WinForms之后的一大步。虽然Python本身通过编程更高级别的抽象提供了良好的生产力增益,但wxPython的使用方式比VCL更低的抽象级别。例如,我浪费了很多时间试图让wxPython列表对象按照我想要的方式运行。只是添加可排序的列涉及几个代码密集的步骤,一个用于创建和维护提供实际排序顺序的阴影数据结构,另一个用于在列标题中显示图形排序方向三角形,以及还有一些我不记得了。所有这些容易出错的步骤都可以通过使用我的Delphi网格组件设置属性值来完成。

我的结论:虽然Python通过提高许多通用编码的抽象级别来提高生产力,但是wxPython是几个抽象级别 lower 比Delphi可用的gui工具。最终结果:使用Delphi进行gui编程比使用Python进行gui编程要快得多,而得到的带有Delphi的ui仍然更加精致和功能齐全。对我来说,似乎并不夸张地认为Delphi gui编程在1995年比使用wxPython的python gui编程在2009年更先进。

我做了一些关于其他python gui框架的调查,看起来没有任何比wxPython好得多。我也对wxPython的gui formbuilders进行了一些简单的调查,这会让事情变得更好一些。但是大多数报道这些解决方案都是错误的,甚至一个伟大的formbuilder都无法解决我对wxPython的主要抱怨,这只是因为它具有较少的功能,并且通常要求你以比我低得多的抽象级别进行gui编程。以前用于Delphi的VCL。一些快速调查建议的python gui-dev解​​决方案(http://wiki.python.org/moin/GuiProgramming)对于习惯使用Delphi或.NET的人来说实在有些令人沮丧。

最后,我有几个问题。

首先,我错过了什么?是否有一些Python的gui开发解决方案可以与VCL或WinForms编程进行比较?我不一定关心它是否与Delphi的VCL不相符。我只是在寻找同一联盟中的东西。

第二,IronPython可以成为前进的方向吗?我大多试图避免喝.NET koolaid,但也许IronPython让我有理由最终放弃。即便如此,IronPython是否与WinForms完全集成,或者我需要让表单本身由c#或vb支持。净?在我看来,SharpDevelop和MonoDevelop肯定就是这种情况(即,IronPython不能用于设计时间的gui构建)。 VS.NET是否将IronPython与gui-building完全集成?

在我看来,Python可以像1990年代早期的Visual Basic那样,以类似于Python的一些精彩的新gui构建解决方案的方式“接管世界”。只有这次使用Python,我们才能拥有全新的快速,跨平台和开源 gui编程范例。企业不会吃掉它吗?是的,我知道,网络应用程序是当今最重要的事情,所以一个伟大的Python-gui解决方案不会创造VB曾经做过的同样的革命。但是我没有看到gui编程消失,我想要一个很好的现代,开源,高级解决方案。

9 个答案:

答案 0 :(得分:12)

似乎你的抱怨是关于wxPython,而不是关于Python本身。试试pyQt(或者是qtPython?)

但是,wxPython和pyQt都只是对C / C ++(分别)库的Python绑定,它与原始文件一样(概念上)低级别。

但是,Qt远远优于wx

答案 1 :(得分:5)

PyQt是对诺基亚的Qt SDK的绑定,而PyQt本身是由一家名为RiverBank的公司提供的。

如果许可证对您不重要,您可以在GPL下使用PyQt,或者您需要支付一些钱用于商业许可。

PyQt现在正在绑定Qt 4.4。

Qt不只是GUI,它是一个完整的C / C ++ SDK,可以帮助网络,xml,媒体,数据库和其他东西,PyQt将所有这些转移到python。

使用PyQt,您将使用Qt Designer,并通过简单的命令行将.ui文件传输到.py文件。

你会在网上找到很多关于PyQt的资源和来自不同社区的良好支持,甚至还有关于PyQt的书籍。

许多建议认为RiverBank别无选择,只能发布下一个依赖于LGPL下的Qt 4.5的版本,我们正在等待:)。

另一个解决方案是使用Java Swing的Jython,编写非常简单和优雅(特别是在JDK 6下),但在Internet上没有足够的资源。

答案 2 :(得分:3)

您可能希望查看Jython(Java VM上的Python)。它与Iron Python非常相似,你可以使用.Net koolaid。

答案 3 :(得分:3)

dabo将wxPython编程放在更高级别,就像你正在寻找的那样。

答案 4 :(得分:2)

您可能不得不使用.net或java pythons,但请先检查一下,看看它是否符合您的要求:

Kiwi

答案 5 :(得分:2)

简短回答:不要尝试使用Tkinter - 它有上述所有问题。

答案很长:Tkinter对大型程序没用。用它来处理各种碎片总会贬低为杂耍(从未发生过这种情况),并且产生的输出看起来不是原生的或特别抛光的。

答案 6 :(得分:0)

你是对的,wxPython可以定义得到改进。但我认为Robin Dunn到目前为止做得很好,现在仍然如此。

特别是wxPython社区可以接受改进,例如最近Andrea包含小部件,所以像许多社区项目一样选择你最喜欢的那个,并在使用它的同时进行改进。

答案 7 :(得分:0)

我们很高兴使用Python.Net在WinForms中构建我们的UI并使用CPython for Presenter,Model。如果你想在Windows上做python,IronPython也是一个很好的工具。

答案 8 :(得分:0)

Wax,其目的是为wxWidgets创建一个更加pythonic的界面,但似乎它的发展已停滞。