0
有人可以解釋爲什麼此代碼崩潰?我認爲應該發生的是,如果它使用完全限定的特徵名稱,它不應該崩潰,在這種情況下它是完全合格的特徵名稱。traitsui對象模型如何工作
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'
但確實,如果你檢查的對象。
我正在擺弄這個例子,如果我用Property
替換cur_struct
特性,我就會正確地工作,我不知道爲什麼。然而,對於我的真實應用來說,這是不可行的,其中另一個類監聽來自完全不同的類的事件並且開關cur_struct
。
你的回溯表示'InteractiveSubwindow',但是在你引用的代碼中沒有出現。請更正您的示例,使其運行並提供您所詢問的錯誤。謝謝! –
對不起,它只是子窗口。更簡單的例子給出了同樣的錯誤。 – aestrivex