[英]Dynamic initialization of Traits Range object
我在嘗試動態初始化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 = Range(低= 0, 高= 10 )替換'R'的定義,代碼就有效,但當然我沒有得到我正在尋找的Range高參數的動態初始化。
感謝所有建議。
*喬納森回應后編輯*
以下是使用Jonathan的有用建議解決我問題的簡單方法:
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()
一種方法是不按常規方式定義特征,而是在__init__
內定義特征,因此:
self.add_trait("R", Range(0, N))
請參閱http://docs.enthought.com/traits/traits_user_manual/advanced.html#per-object-trait-attributes
您遇到Traits / TraitsUI錯誤:
解決方法是為低端創建另一個Trait:
from traits.api import HasTraits, Int, Range
from traitsui.api import View, Item
class DynamicRange(HasTraits):
"""Dynamic initialisation of a Range object"""
# Upper limit of R
N = Int()
# Lower limit of R (not exposed to the user)
_zero = Int(value=0)
R = Range(low='_zero', high='N')
traits_view = View(Item('R'), Item('N'))
Robject = DynamicRange(N=10)
Robject.configure_traits()
或者使用@ JonathanMarch的解決方案。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.