运行时创建的特征的非 hacky 解决方案无法在视图中显示
Non-hacky solution for runtime created traits can't be displayed in View
我反复遇到这种情况,
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')
问题:我想在我的主显示器中显示 a.i、a.j、a.k。
限制条件:
(1) i、j、k 绝对必须保留为 A 的成员,而不是 MainDisplay。将它们包含在 MainDisplay 中没有意义,如果我对每个特征都这样做,MainDisplay 会变得太混乱。
(2) MainDisplay 不得 继承 class A. 如果继承,我可以在 traits_view 内完成 "Include('a_display')"。这是将 MainDisplay 中的一些代码分隔开来的好技巧,但它不适用于我的情况。
(3)MainDisplay不能简单的复制A中的trait,然后同步。例如 MainDisplay.dummy_i=Int(),然后在稍后的 init 中,self.sync_traits('dummy_i',self.a,'i',mutual=True)。最后在 MainDisplay.traits_view 中使用 'dummy_i'。这也有效,但 MainDisplay class 再次变得如此混乱!另外,每次我想更改 GUI(或特性)时,我有两个地方要编辑,这会减慢开发速度。
我是 GUI 的新手,但我觉得不能在运行时创建变量是一个奇怪而尴尬的限制。我的印象是Enaml,看起来要取代traitsUI也有这个限制。
我的主要兴趣是显示 Mayavi 创建的 3D 几何图形并与之交互。有没有可能 PyQt 没有这个限制?
在 MainDisplay 的视图中,您可以引用 Item("object.a.i")
等,其中 object
是您键入的字面意思(不是占位符)。这在 TraitsUI 文档的 "Advanced View Concepts" 部分 Multi-Object Views.
中进行了描述
我反复遇到这种情况,
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')
问题:我想在我的主显示器中显示 a.i、a.j、a.k。
限制条件:
(1) i、j、k 绝对必须保留为 A 的成员,而不是 MainDisplay。将它们包含在 MainDisplay 中没有意义,如果我对每个特征都这样做,MainDisplay 会变得太混乱。
(2) MainDisplay 不得 继承 class A. 如果继承,我可以在 traits_view 内完成 "Include('a_display')"。这是将 MainDisplay 中的一些代码分隔开来的好技巧,但它不适用于我的情况。
(3)MainDisplay不能简单的复制A中的trait,然后同步。例如 MainDisplay.dummy_i=Int(),然后在稍后的 init 中,self.sync_traits('dummy_i',self.a,'i',mutual=True)。最后在 MainDisplay.traits_view 中使用 'dummy_i'。这也有效,但 MainDisplay class 再次变得如此混乱!另外,每次我想更改 GUI(或特性)时,我有两个地方要编辑,这会减慢开发速度。
我是 GUI 的新手,但我觉得不能在运行时创建变量是一个奇怪而尴尬的限制。我的印象是Enaml,看起来要取代traitsUI也有这个限制。
我的主要兴趣是显示 Mayavi 创建的 3D 几何图形并与之交互。有没有可能 PyQt 没有这个限制?
在 MainDisplay 的视图中,您可以引用 Item("object.a.i")
等,其中 object
是您键入的字面意思(不是占位符)。这在 TraitsUI 文档的 "Advanced View Concepts" 部分 Multi-Object Views.