2

我们正在尝试评估这个想法的可行性:

我们在建模程序中有一个非常深的 HasTraits 对象堆栈。例如,如果我们对两种材料进行建模,我们可以通过以下方式访问这些材料的各种属性:

Layer.Material1.Shell.index_of_refraction
Layer.Material5.Medium.index_of_refraction

我们已将此代码用于模拟,其中我们仅增加特征的值。例如,我们可以运行一个模拟,其中一种材料的 index_of_refraction 在 10 次迭代中从 1.3 变化到 1.6。它实际上工作得很好。

问题在于为模拟选择所需的特征。用户不会知道所有这些特征变量名称,因此我们想呈现程序整个特征结构的层次结构/树视图。对于上述两个特征,它可能看起来像:

Layer
 - Material1
    - Shell
        - index_of_refraction
 - Material2
    - Medium
        - index_of_refraction

ETC...

我知道 traitsui 支持 TreeEditor,但是有没有像这样基于检查 HasTraits 堆栈构建 TreeEditor 的示例?从对象中获取特征堆栈的最直接方法是什么?本质上,这个想法可行还是我应该回到绘图板上?

谢谢

4

2 回答 2

2

这样ValueEditor做。您可以在TreeEditor此处查看它是如何配置的:

https://github.com/enthought/traitsui/blob/master/traitsui/value_tree.py

于 2015-01-14T22:15:17.780 回答
1

在此处输入图像描述

这是罗伯特解决方案中的图像。

后续讨论

罗伯特,想象一下我有一个自定义的 TreeEditor。它似乎不允许我直接使用它:

Item('myitem', editor=TreeEditor())

我得到:

traits.trait_errors.TraitError: The 'adapter' trait of an ITreeNodeAdapterBridge instance must be an implementor of, or can be adapted to implement, ITreeNode or None, but a value of [<pame.gensim.LayerSimulation object at 0x7fb623bf0830>] <class 'traits.trait_handlers.TraitListObject'> was specified.

我已经用_ValueTree, ValueTree, value_tree_editor,value_tree_editor_with_root和尝试_ValueEditor过这个ValueEditor

唯一有效的是 ValueEditor,因此,即使我可以理解如何将 TraitsNode 子类化,除非我通过 EditorFactory 将所有内容连接起来,否则它似乎不会起作用。IE 我们想要自定义的行为一直在 TreeEditor 中,并且隐藏在 _ValueEditor、ValueEditor、EditorFactory 等之下......

这有道理吗?

于 2015-01-14T23:17:02.740 回答