0

我反复发现自己处于这种情况,

class MainDisplay(HasTraits):
    a=Instance(A,())    
    def __init__(self):
        self.a=A()
    traits_view=View(...)

class A(HasTraits):
    i=Int()
    j=Int()
    k=Int()
    def __init__(self):
        i,j,k=something
    a_display=Group('i','j','k')

问题:我想在我的主显示器中显示 ai,aj,ak。

约束:

(1) i,j,k 绝对必须是 A 而不是 MainDisplay 的成员。将它们包含在 MainDisplay 中是没有意义的,如果我对每个特征都这样做,MainDisplay 会变得过于混乱。

(2) MainDisplay 不能继承类 A。如果是,我可以在 traits_view 中执行“Include('a_display')”。这是从 MainDisplay 划分一些代码的一个很好的技巧,但在我的情况下它不起作用。

(3) MainDisplay 不能简单地复制 A 中的特征,然后将它们同步。例如 MainDisplay.dummy_i=Int(),然后在稍后的 init 中,self.sync_traits('dummy_i',self.a,'i',mutual=True)。最后在 MainDisplay.traits_view 中使用“dummy_i”。这同样有效,但 MainDisplay 类再次变得如此混乱!此外,每次我想更改 GUI(或特征)时,我都有两个地方要编辑,这会减慢开发速度。

我是 GUI 新手,但我觉得无法在运行时创建变量是一个奇怪而尴尬的限制。我的印象是,看起来要替换 traitsUI 的 Enaml 也有这个限制。

我的主要兴趣是显示 Mayavi 创建的 3D 几何图形并与之交互。PyQt可能没有这个限制吗?

4

1 回答 1

1

在 MainDisplay 的视图中,您可以参考Item("object.a.i")等,object字面意思是您键入的内容(不是占位符)。这在 TraitsUI 文档的“高级视图概念”部分Multi-Object Views中有描述。

于 2015-10-25T03:19:00.500 回答