如何将'values'动态添加到CheckListEditor?
但是,我必须从Bclass选项attr。
from enthought.traits.api import HasTraits, Instance, Str
from enthought.traits.ui.api import View, Item, CheckListEditor
class Bclass:
options = ['one', 'two']
class Aclass(HasTraits):
bclass = Instance(Bclass)
abc = Str
view = View(
Item(name='abc', editor=CheckListEditor(values=['one', 'two']) ),
style='simple',
)
答案 0 :(得分:6)
您可以为其指定包含值的特征名称,而不是向CheckListEditor
提供values
,而不是from traits.api import HasTraits, Instance, Str, List
from traitsui.api import View, Item, CheckListEditor
class Bclass(HasTraits):
options = List(['one', 'two'])
class Aclass(HasTraits):
bclass = Instance(Bclass)
abc = Str
traits_view = View(
Item(name='abc', editor=CheckListEditor(name='object.bclass.options')),
)
b = Bclass()
a = Aclass(bclass=b)
a.configure_traits()
。{/ p>
'object.bclass.options'
在示例中,options
表示:名为bclass
的特征,它是上下文object
中名为Bclass
的特征的属性,即,HasTraits
的名称空间。当前对象。只有在另一个类中使用特征的名称时才需要上下文。
更新以下海报的评论:
在评论中,海报询问如果options
不是Bclass
类,和/或HasTraits
是字典,会发生什么。
如果from traits.api import HasTraits, Instance, Str
from traitsui.api import View, Item, CheckListEditor
class Bclass(object):
options = {'one': 1, 'two': 2}
class Aclass(HasTraits):
bclass = Instance(Bclass)
abc = Str
def default_traits_view(self):
options = self.bclass.options.keys()
view = View(
Item(name='abc', editor=CheckListEditor(values=options)),
)
return view
不是default_traits_view
类,您将无法回复字典内容中的更改,因此我会这样做:
Bclass
调用HasTraits
方法动态创建TraitsUI视图。
如果from traits.api import HasTraits, Instance, Str, Property, Dict
from traitsui.api import View, Item, CheckListEditor
class Bclass(HasTraits):
options = Dict({'one': 1, 'two': 2})
class Aclass(HasTraits):
bclass = Instance(Bclass)
abc = Str
options = Property(Str, depends_on='bclass.options')
def _get_options(self):
return self.bclass.options.keys()
traits_view = View(
Item(name='abc', editor=CheckListEditor(name='options')),
)
是options
类,那么您可以做得更好:
{{1}}
在这种情况下,只要{{1}}字典的内容发生更改,视图就会更新。