enthought traits UI,动态地将值添加到CheckListEditor的'values'特征

时间:2013-05-21 06:58:19

标签: python enthought

如何将'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',
        )

1 个答案:

答案 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}}字典的内容发生更改,视图就会更新。