我最初在机械工程的博士后研究中开始使用Traits和TraitsUI构建GUI。我之前使用MATLAB的GUIDE构建GUI,相比之下,我发现TraitsUI非常简单直观,易于上手。TraitsUI的进展与付出呈线性关系,对于我所做的有限数量的GUI构建来说,它已经足够了。
作为一名专业的开发人员(完全透明:我在Enthought工作),我的观点有所改变。首先,重要的是要区分Traits(类型、验证、通知和依赖系统)和TraitsUI(基于Traits构建的GUI层)。我经常使用Traits,并且它支撑着我编写的很多代码。特别是由于其依赖性和通知实用程序,我认为它是无价的。
然而,不久之后,TraitsUI在应用程序构建方面的局限性就开始显露出来了。正如我之前提到的,TraitsUI对于小型到中型应用程序来说已经足够了,但是创建更复杂的布局会变得困难,我们花费了很多时间与TraitsUI搏斗,以产生更大、更复杂和更灵活的应用程序界面。
这导致了Enaml的开发几乎是从零开始的。Enaml在其核心使用基于约束的布局系统,并与Traits集成。从一开始,它就解决了TraitsUI的布局弱点。我们每个人都曾使用过这两个系统,更喜欢Enaml,并认为它是GUI构建的首选工具。对于布局GUI的控制和灵活性水平是非常显著的 - 存在一些漂亮的演示资料可以在repo中查看。
话虽如此,初始学习曲线略微陡峭(但只是略微),因为有必要从一开始就掌握某些概念,例如MVC分离。有经验的开发人员会立即看到其价值,但对于具有科学或工程背景的新用户来说可能是一个障碍。不过,这只是一个小障碍,很容易克服。此外,虽然功能集几乎完整,但仍有一些缺口。填补这些空白的工作正在稳步进行,但Enaml在技术上仍处于beta状态。
总的来说,如果你正在考虑选择哪个工具集进行学习,我的建议是学习Enaml。这是我们现在和未来将要使用的工具。
由于此答案持续受到关注并引发讨论,更新此观点已经迟到了,第一个答案发布于2012年底。Enaml主要是由一位主要开发人员完成的。当他在2013年初离开Enthought时,他分叉了enaml存储库,并在nucleic/enaml存储库中开始开发它。我们(Enthought)决定不开发竞争性分支,并引入了一个薄接口库enthought/traits-enaml,以提供对nucleic/enaml
中更改的持续兼容性。同时,我们还推出了enthought/qt_binder,以便在Traits/TraitsUI框架中轻松访问低级别的Qt小部件,这提供了与Enaml提供的大部分布局灵活性相同的功能。
现在Traits/TraitsUI是我们大多数应用程序GUI构建所使用的堆栈。 我们继续在Python 2和3中维护和开发Traits、TraitsUI以及Enthought Tool Suite(Chaco,Kiva,Envisage等)中的其他库,并且它们继续满足我们的需求,特别是在
enthought/envisage可插入式应用程序框架中。
我的修改建议是,如果您想要在Python中构建一个富客户端应用程序(不是Web应用程序),我建议学习Traits和TraitsUI。
enaml
和Traits
都已经不再积极开发了。你会推荐哪个库来替代它们呢? - maxTraits
目前仍由Enthought员工和其他人积极开发。enaml
不再由Enthought开发,而是其主页位于https://github.com/nucleic/enaml,最后一次活动是在2016年6月,因此它似乎已经停滞不前了。 - Tim D