反而給人以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()
在這個例子中,'object.bclass.options'
表示:性狀叫options
這是上下文object
中稱爲bclass
的特徵的屬性,即當前對象的名稱空間。只有在另一個班級中使用特質名稱時,上下文才是必需的。
更新以下海報的評論:
在評論,海報問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
方法被調用來創建TraitsUI視圖動態。
如果Bclass
是HasTraits
類,那麼你可以做的更好:
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可能會或可能不會派生自HasTraits
在您的答覆選項= ['one','two']中,將起作用。
–
我更新了迴應,以便我可以使用代碼塊。 – pberkes