Python GUI编程的现状问题

21

我最近修改了一个使用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编程会消失,而且我希望有一个漂亮的现代、开源、高级别的解决方案。


这是 https://dev59.com/pXVD5IYBdhLWcg3wQZUg 的重复吗? - dbr
不确定。我看到了很多相关的帖子,但没有一个直接回答我的问题。每当有人建议在Python中进行GUI编程时,我总是想知道自己是否遗漏了什么。大多数解决方案似乎与我所熟悉的相比严重不足。 - Herbert Sitz
-1:有很多抱怨和修辞性问题。专注于某些具体的东西可能会有所帮助。 - S.Lott
-1: 同样如此。似乎没有进行任何真正的研究。这篇文章只是在抱怨... - Kozyarchuk
这可能与主题无关,但是wxPython在最近几年中增加了一些更完整的控件;其中一些ListCtrl问题可能(或可能不)可以通过替换为更新/更好的控件来解决。但是文档往往缺乏... 我同意它应该比现在更容易。 - Jeff Shannon
9个回答

11

看起来你的抱怨是关于wxPython,而不是Python本身。尝试使用pyQt(或者是qtPython)。

但是,wxPython和pyQt都只是Python绑定到C/C++库(分别),在概念上与原始语言一样低级。

但是,Qt要比wx优越得多。


我同意;PyQt比wxWidgets更加流畅。 - timday
QT很棒,比wx更喜欢它。 - Christian Witts

4

PyQt是由Nokia的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别无选择,只能发布下一个版本,该版本将依赖于Qt 4.5 LGPL版,我们正在等待 :)

另一种解决方案是使用Java Swing的Jython编写,非常容易和优雅(特别是在JDK 6下),但互联网上的资源不足。


3
您可能想看看Jython(Java虚拟机上的Python)。它与Iron Python非常相似,您可以放弃使用.Net。

3

dabo将wxPython编程提升到了更高的水平,正如你所期望的那样。


2

您可能需要使用 .net 或 Java Python,但是先看看这个是否满足您的需求:

Kiwi


注:保留了HTML标签。

请修复链接,它已经失效了。 - UnDiUdin

2
短答案:不要尝试使用Tkinter - 它存在上述所有问题。
长答案:Tkinter对于大型程序并不是很有用。使用它处理各种组件总是不可避免地会退化为杂耍(否则从未发生),结果输出看起来并不本地化或特别精美。

我对Tkinter没有很多经验,但是我所做的事情(还有一些关于Perl-Tk的尝试)强烈支持这样一个想法:Tk(以任何形式)非常适合快速创建简单的UI,但是尝试做任何稍微复杂的事情都很困难。 - Jeff Shannon
Guido 知道他在做什么。如果 tkinter 与 Python 一起发布,那肯定有它的原因。 - ychaouche
Tkinter与Delphi VCL相比较弱(即使是Tkinter世界冠军在原型设计GUI应用方面也无法像普通的Delphi开发人员那样高效)。我同意ehdv的观点,Tkinter属于低级别的GUI库,它被Python所附带是因为它允许使用画布,而不是专门用于设计GUI应用。 - UnDiUdin

0

你说得没错,wxPython肯定可以改进。但我认为Robin Dunn迄今为止已经做得非常好了,而且仍在继续努力。

特别是wxPython社区对改进持开放态度,比如最近包括Andrea的小部件,所以像许多社区项目一样,选择你最喜欢的那个,并在使用它的同时进行改进。


我已经好几年没用过wxPython了,但Robin Dunn真的很棒——他花费了大量时间来支持wx的开发,并且非常友善和乐于助人。他已经极大地减少了wxWidgets和Python之间的阻抗不匹配。可悲的是,即使这种不匹配正在缩小...(续) - Jeff Shannon
与其他GUI工具包相比,wxPython变得更加棘手。我赞成Robin将wxPython保持为wxWidgets的薄包装器,但它更像是用C++而不是Python编写GUI...拖放构建器将是一个很好的帮助-我想知道Boa Constructor发生了什么? - Jeff Shannon

0

我们一直很喜欢使用Python.Net来构建WinForms中的UI,并使用CPython作为Presenter和Model。如果您想在Windows上使用Python,IronPython也是一个不错的工具。


0

Wax, 它的作用是为wxWidgets创建一个更pythonic的接口,但似乎它的开发已经停滞不前了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接