我们试图评估这一想法的可行性:
我们在一个建模程序中有一个非常深的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等等..。
我知道traitsui支持TreeEditors,但是有基于这样的HasTraits堆栈检查构建TreeEditor的例子吗?从对象中获取特征堆栈最直接的方法是什么?从本质上说,这个想法可行吗?还是我应该回到画板上去?
谢谢
发布于 2015-01-14 22:15:17
ValueEditor就是这样做的。您可以在这里查看它如何配置TreeEditor来完成这个任务:
发布于 2015-01-14 23:17:02

这是罗伯特的解决方案的图像。
后续讨论
罗伯特,想象一下我有一个定制的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将所有东西连接起来,否则它似乎无法工作。我们想要定制的行为一直在TreeEditor中,它隐藏在_ValueEditor、ValueEditor、EditorFactory等.
这说得通吗?
https://stackoverflow.com/questions/27949392
复制相似问题