У меня возникли проблемы с динамической инициализацией объекта Traits Range.
Следующий код является очень простым примером того, что я пытаюсь сделать, но, к сожалению, терпит неудачу со следующей ошибкой типа:
TypeError: неподдерживаемые типы операндов для -: 'int' и 'code'
from traits.api import HasTraits, Int, Range
from traitsui.api import View, Item
class DynamicRange(HasTraits):
"""Dynamic initialisation of a Range object"""
N = Int()
R = Range(low=0, high='N')
traits_view = View(Item('R'), Item('N'))
def __init__(self, N):
self.N = N # initial parameter value for N
def _N_default(self):
return self.N
Robject = DynamicRange(N=10)
Robject.configure_traits()
Код работает, если я заменяю определение «R» на: R = Range(low=0, high=10), но тогда, конечно, я не получаю динамическую инициализацию верхнего предела диапазона. параметр, который я ищу.
Все предложения с благодарностью приняты.
* Изменить после ответа Джонатана *
Вот простое решение моего вопроса с использованием полезного предложения Джонатана ниже:
from traits.api import HasTraits, Range
from traitsui.api import View, Item
class DynamicRange(HasTraits):
"""Dynamic initialisation of a Range object"""
traits_view = View(Item('R'))
def __init__(self, N):
self.add_trait("R", Range(0, N))
Robject = DynamicRange(N=30)
Robject.configure_traits()