Вместо того, чтобы давать в 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
которые является атрибутом признака bclass
в контексте object
, т. е. пространства имен текущего объекта. Контекст необходим только при использовании имени признака в другом классе.
Update следующего комментарий плаката:
В комментариях, плакат спросил, что случилось бы, если 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