VPython球体颜色属性参数化失败问题求助
解决VPython中sphere命令color属性参数化的问题
嘿,我看你遇到的问题很典型——你把color参数处理成了字符串,但VPython根本不认这个!
先看错误提示里的关键信息:ArgumentError: Python argument types in None.None(sphere, str) did not match C++ signature: None(class cvisual::primitive {lvalue}, class cvisual::rgb),说白了就是你传了个字符串给color,但它要的是cvisual::rgb或者VPython的vector对象。
你原来的代码里,把colour[i](比如"1,1,0")拼接成了"vector(1,1,0)"这样的字符串,但这只是一串文本,不是真正的vector实例。VPython没办法把字符串转换成它需要的颜色对象,所以报错了。
正确的处理方式
直接把颜色字符串拆分成数值,然后创建真正的vector对象就行,不用搞字符串拼接:
for i in range(53): planet = objekt[i] # 拆分颜色字符串,转成浮点数后创建vector r, g, b = map(float, colour[i].split(',')) col = vector(r, g, b) print planet, col planet = sphere(pos=vector(xcoord[i]*KM, ycoord[i]*KM, zcoord[i]*KM), radius=radii[i], color=col)
为什么原来的方法不行?
你之前的代码生成的是"vector(1,1,0)"字符串,而VPython的color参数需要的是实际的vector或rgb对象,不是描述这个对象的文本。就像你告诉别人"给我一杯水"和直接递一杯水的区别——VPython要的是实实在在的颜色对象,不是字符串描述。
如果实在想用类似字符串转对象的方式(不推荐,有安全风险),可以用eval(col),但强烈建议用上面的拆分方法,更安全也更清晰。
内容的提问来源于stack exchange,提问作者Pete
相关产品推荐
相关产品推荐

