dre*_*eme 2 python range enthought traitsui
我在尝试动态初始化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()
Run Code Online (Sandbox Code Playgroud)
如果我用'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()
Run Code Online (Sandbox Code Playgroud)
一种方法是不以通常的方式定义特征,而是在内部__init__,因此:
self.add_trait("R", Range(0, N))
Run Code Online (Sandbox Code Playgroud)
请参阅http://docs.enthought.com/traits/traits_user_manual/advanced.html#per-object-trait-attributes
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |