如何处理不可调用的对象类型的错误

约翰·R

我正在尝试使用TKinter中的VTK使用python制作动画,同时我被以下错误所卡住,并且我不理解此错误,请注意此错误

TypeError: 'NoneType' object is not callable

我不知道哪个对象为null或为空!为了识别这一点,我将print语句与函数参数一起放置,但是我找不到!请注意以下代码,请有人帮助我。我正在做的整个程序是在渲染屏幕中添加VTK球体对象,我想通过在计时器计数事件中移动该球体来进行动画处理。

错误命中线是

obj_renwin.actor.SetPosition(cone_Obj.timer_count, cone_Obj.timer_count,5);

请注意详细的代码

import vtk

class Cone():

    def __init__ (cone_Obj):             
        cone_Obj.timer_count = 0

    def sphere_render(cone_Obj,obj_renwin):

        obj_renwin.sphereSource = vtk.vtkSphereSource()
        obj_renwin.sphereSource.SetCenter(0.0, 0.0, 0.0)
        obj_renwin.sphereSource.SetRadius(.5)    
        obj_renwin.actor = vtk.vtkActor()
        obj_renwin.mapper = vtk.vtkPolyDataMapper()
        obj_renwin.mapper.SetInputConnection(obj_renwin.sphereSource.GetOutputPort())
        obj_renwin.actor.SetMapper(obj_renwin.mapper)
        obj_renwin.actor.SetPosition(-0.5,.5,-0.5)
        obj_renwin.prop = obj_renwin.actor.GetProperty()
        obj_renwin.add_actors(obj_renwin.actor)
        obj_renwin.renwin.Render()

        return obj_renwin.actor     

    def animation(cone_Obj,obj_renwin):              
        renderwininstance=obj_renwin
        #print renderwininstance        
        renderWindowInteractor = vtk.vtkRenderWindowInteractor()
        renderWindowInteractor.SetRenderWindow(obj_renwin.renwin)
        obj_renwin.renwin.Render()
        renderWindowInteractor.Initialize()      
        renderWindowInteractor.AddObserver('TimerEvent',cone_Obj.execute(cone_Obj,obj_renwin))           
        timerId = renderWindowInteractor.CreateRepeatingTimer(5);
        renderWindowInteractor.Start()

    def execute(self,cone_Obj,obj_renwin):
        print "obj_renwin is..."
        print obj_renwin
        obj_renwin.actor.SetPosition(cone_Obj.timer_count, cone_Obj.timer_count,5);
        cone_Obj.timer_count += 1
        obj_renwin.Render() 


cone_Obj = Cone()
伯克·格维奇

您使用AddObserver()添加观察者的方式不正确。AddObserver()接受一个自由函数(不是一个绑定函数),因此您需要定义一个全局函数并使用它。这里是重现该问题:

class Foo():
def execute(self, foo, bar):
    print 'In execute'

foo = Foo()
o = vtk.vtkDataObject()
o.AddObserver('ModifiedEvent', foo.execute(foo, None))
o.Modified()

VTK实现观察者的方式使得很难将参数传递给他们。我通常使用闭包来解决这个问题。这是一个例子

class Foo():
    def execute(self, foo, bar):
        print 'In execute'

foo = Foo()

def MakeObserver(arg):
    myarg = arg
    def observer(obj, event):
        myarg.execute(None, None)
    return observer

o = vtk.vtkDataObject()
o.AddObserver('ModifiedEvent', MakeObserver(foo))
o.Modified()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

类型错误“类”对象不可调用

在Keras中合并,类型错误:模块对象不可调用?

我不知道如何处理此Python错误TypeError:“ tuple”对象不可调用

类型错误:“布尔”对象不可调用

'str'对象不可调用,如何处理?

类型错误:Int对象不可调用

类型错误:“int”对象不可调用 colab 研究

错误类型错误:“str”对象不可调用

如何解决:(类型错误:“str”对象不可调用)

类型错误:“DataFrame”对象不可调用 - 触发数据框

类型错误:“模块”对象不可调用 - pygsp 模块不可调用

类型错误:“StringVar”对象不可调用

类型错误:“条目”对象不可调用

类型错误:'bool' 对象在 Pygame 中不可调用

类型错误:“ShiftSerializer”对象不可调用

类型错误:“模块”对象在 Keras 中不可调用 Tensorboard

底图类型错误:“模块”对象不可调用

Mechanicalsoup 类型错误:“模块”对象不可调用

进度条 - 类型错误:“模块”对象不可调用

硒错误“类型错误:‘str’对象不可调用”

澄清类型错误:“str”对象不可调用

类型错误:“球”对象不可调用?

类型错误:“IndicesClient”对象不可调用

如何修复多处理器类型错误:“列表”对象不可调用

类型错误:“列表”对象不可调用,sys.argv()

类型错误:“WebElement”对象不可调用

类型错误:int 对象不可调用

类型错误:“Vocab”对象不可调用

matplotlib图例类型错误:“列表”对象不可调用