そんな状況に何度も遭遇し、
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 は、MainDisplay ではなく A のメンバーのままでなければなりません。それらを 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 (または特性) を変更するたびに、編集する場所が 2 つあるため、開発が遅くなります。
私は GUI の初心者ですが、実行時に変数を作成できないのは奇妙で厄介な制限だと思います。traitsUI を置き換えようとしている Enaml にもこの制限があるというのが私の印象です。
私の主な関心事は、Mayavi によって作成された 3D ジオメトリを表示して操作することです。PyQt にこの制限がない可能性はありますか?