0

誰かがこのコードがクラッシュする理由を説明できますか? 私が考えるべきことは、この場合のように、完全修飾された特性名を使用している場合にクラッシュしないことです。

from traits.api import *
from traitsui.api import *

class Struct(HasTraits): pass

class Struct1(Struct):
  some_data=Int(4)
  some_more_data=Str('pizza')

class Struct2(Struct):
  some_data=Int(5)
  some_more_data=Str('wossar')

class Subwindow(Handler):
  struct1=Instance(Struct1)
  struct2=Instance(Struct2)

  which_struct=Enum(1,2)
  cur_struct=Any

  def _struct1_default(self): return Struct1()
  def _struct2_default(self): return Struct2()
  def _cur_struct(self): return self.struct1

  @on_trait_change('which_struct')
  def switch_views(self): NotImplemented #switch views here

traits_view=View(
    Item(name='which_struct'),
    Item(name='object.cur_struct.some_data'),
    Item(name='object.cur_struct.some_more_data'),
)

Subwindow().configure_traits()

これを実行すると、

AttributeError: 'Subwindow' object has no attribute 'object.cur_struct.some_data'

しかし、オブジェクトを調べるとそうです。

cur_struct私はこの例をいじっていましたが、特性に置き換えると正しく機能するようになりましたが、Propertyその理由はわかりません。ただし、別のクラスがまったく別のクラスからのイベントをリッスンしてスイッチする実際のアプリケーションでは、それは実現できませんcur_struct

4

1 に答える 1