如何修复“TraitError:......实例的'输入'特征是'只读'。”

时间:2016-01-29 16:30:07

标签: python macports enthought mayavi

我一直更喜欢比vtk的原始Python API更多的pythonic tvtk,但是从MacPorts得到的最新版本,我遇到的问题是基本的东西不再起作用了。以下代码段取自tvtv documentation

from tvtk.api import tvtk
cs = tvtk.ConeSource()
cs.resolution = 36
m = tvtk.PolyDataMapper()
m.input = cs.output # <== fails here
a = tvtk.Actor()
a.mapper = m
p = a.property
p.representation = 'w'
print p.representation

每次初始化'input'特征时,都会出现类似

的错误
TraitError: The 'input' trait of a PolyDataMapper instance is 'read only'.

我发现了许多类似的问题,错误报告等,但它们都指向与VTK 6(SetInputDataSetInputConnection而非SetInput)相关的更改,{{3我正在使用:

vtk @6.3.0_0+python27 (active)
py27-traits @4.5.0_0 (active)
py27-traitsui @5.0.0_0 (active)
py27-apptools @4.3.0_0 (active)
py27-envisage @4.4.0_0 (active)
py27-pyface @5.0.0_0+pyqt4 (active)
py27-mayavi @4.4.3_0 (active)

PolyDataMapper具有以下输入特征:

'input': <traits.traits.CTrait at 0x11b23a260>,
'input_algorithm': <traits.traits.CTrait at 0x119516520>,
'input_as_data_set': <traits.traits.CTrait at 0x11b230470>,
'input_connection': <traits.traits.CTrait at 0x119516310>,
'input_executive': <traits.traits.CTrait at 0x1195165d0>,
'input_information': <traits.traits.CTrait at 0x119516680>,

1 个答案:

答案 0 :(得分:3)

Mayavi支持VTK 5.10和VTK 6.x,它们内部有不同的API来配置管道。 tvtk包具有一个通用API,支持两种版本的可移植性。

更改:

m.input = cs.output # <== fails here

为:

from tvtk.common import configure_input
tvtk.configure_input(m, cs) # <== will work

参考:https://github.com/enthought/mayavi/blob/master/tvtk/common.py#L79