2013-05-21 1 views
1

어떻게 CheckListEditor에 동적으로 '값'을 추가 할 수 있습니까?
정적 '값'대신 Bclass 옵션 attr에서 동적으로 가져와야합니다.특성, UI 특성, CheckListEditor의 '값'특성에 동적으로 값 추가

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', 
     ) 

답변

6

대신 CheckListEditorvalues의 목록을 제공합니다, 당신은 그것을 값이 포함 된 특성의 이름을 제공 할 수 있습니다 : 예에서

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() 

'object.bclass.options'는 의미 특색는 options라고하는 문맥 object에있는 bclass이라는 특성의 속성, 즉 현재 개체의 네임 스페이스입니다. 컨텍스트는 다른 클래스의 특성 이름을 사용할 때만 필요합니다. 포스터의 코멘트 다음

업데이트 : 코멘트에

는 포스터 BclassHasTraits 클래스되지 않습니다, 및/또는 options이 사전의 경우 무슨 일이 일어날 지 물었다. BclassHasTraits 클래스가 아닌 경우

, 당신은 사전 내용의 변화에 ​​응답 할 수 없습니다, 그래서 이런 짓을 했을까 다음 default_traits_view 방법은 TraitsUI보기를 만들라고

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 

동적으로 BclassHasTraits 클래스 인 경우

, 당신은 잘 할 수 있습니다이 경우

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 '이'2 '하나'} 및
opions.keys() 에디터와 함께 사용할 수있다
및 Bclass 또는하지 않을 수있다 =
옵션이 경우

+0

당신은 무엇을 할 것 HasTraits에서 파생 된 것


회신 옵션에 [= 1, 2]이 (가) 적용됩니다.

+0

코드 블록을 사용할 수 있도록 응답을 업데이트했습니다. – pberkes