关于Enthought Traits/TraitsUI在Python桌面开发中的看法

13

我正在寻求关于使用Traits / TraitsUI / enaml 用于Python桌面开发的建议和经验。

文档和Enthought支持看起来很有前途,所以我想知道使用这个技术栈的开发人员的真实第一手经验。

更新:

我的主要兴趣是迁移旧的多个桌面数据库应用程序:CRUD /查询/报告。然后,我特别关注数据访问层:现在,我正在使用PosgtreSQL和peewee(一个最简ORM):

  • 是否有内置或并行项目支持SQL数据库?
  • 如果有,是否有ORM支持?(我认为SqlAlchemy在这里是“标准”)
2个回答

22
我最初在机械工程的博士后研究中开始使用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。

感谢您花时间详细阐述您的答案。我在原来的问题中添加了更多的上下文,如果您不介意回答或指向特定的Enthought论坛,再次感谢! - PabloG
1
很遗憾,我对你问题的其余部分不是很了解。让我向你推荐Enthought-dev列表(enthought-dev@enthought.com)。我相信你会在那里得到更具体的帮助。 - Tim D
1
@TimD 我对同时使用Enaml、Traits和Chaco绘图很感兴趣,是否可能将它们三个结合起来? - davidA
看起来 enamlTraits 都已经不再积极开发了。你会推荐哪个库来替代它们呢? - max
@max Traits目前仍由Enthought员工和其他人积极开发。enaml不再由Enthought开发,而是其主页位于https://github.com/nucleic/enaml,最后一次活动是在2016年6月,因此它似乎已经停滞不前了。 - Tim D

5
免责声明:我在Enthought担任开发人员和培训师。
回答问题的次要部分,Traits中没有内置ORM或数据库支持,因此您需要自己编写。这主要是因为Traits是为支持科学应用程序开发而开发的,而不是企业应用程序开发(但这就是为什么Traits具有NumPy支持的原因)。
由于大多数ORM(例如SQLAlchemy、Django的ORM和我也看到了Peewee)和Traits都使用声明式接口和元类使定义对象结构变得非常容易,所以存在不太友好的尴尬。如果您想避免显式的桥接层,则需要对Traits和ORM都有扎实的理解。
如果我正在开发此类应用程序,我可能最终会避免使用ORM,并直接从traits编写到DBAPI层,可能会为此定义一些自定义trait类型(例如,属性trait工厂,其fget和fset执行数据库查询)。
所有这些都说了,承认我有偏向Enthought技术的偏见,但是有一些工具可能更适合在数据库上面放置简单的CRUD UI。其中一个选择是Dabo,但还有其他工具,比如Camelot

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