'VTK textactor not showing

I'm using VTK to show textactor with info 'ID' added to the actors. When my mouse is over an actor, the MouseEvent will call an 'add_text' function. The function was called and printed the correct 'ID' but there's no textactor adding to the window, is there any problem with my program?

class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
    def __init__(self, parent=None):
        self.AddObserver("MouseMoveEvent", self.MouseMove)
        self.LastPickedActor = None
        self.LastPickedProperty = vtk.vtkProperty()
        self.new = vtkTextActor()
        self.old = vtkTextActor()
        self.on_actor = False

    def add_text(self,renderer,ID):
        self.new.SetInput(ID)
        txtprop = self.new.GetTextProperty()
        txtprop.SetFontSize(36)
        self.new.SetDisplayPosition(0,0)
        # renderer.RemoveActor(self.old)
        self.old = self.new

        if self.on_actor:
            renderer.AddActor(self.new)
            print("add_text called , ID : ",ID)
        else:
            pass
            # renderer.RemoveActor(self.old)
            # renderer.RemoveActor(self.new)

    def MouseMove(self,obj,event):
        Mousepos = self.GetInteractor().GetEventPosition()
        picker = vtk.vtkPropPicker()
        picker.Pick(Mousepos[0], Mousepos[1], 0, self.GetDefaultRenderer())
        self.NewPickedActor = picker.GetActor()

        if self.NewPickedActor:
            if not self.on_actor:
                self.on_actor = True
                print("on actor")
                info = self.NewPickedActor.GetProperty().GetInformation()
                info = str(info)
                pattern_1 = re.compile(r"ID.*\d+")
                pattern_2 = re.compile(r"\d+")
                string = pattern_1.findall(info)[0]
                ID = pattern_2.findall(string)[0]
                # print("ID : ",ID)
                self.add_text(self.GetDefaultRenderer() , ID)
                if self.LastPickedActor:
                    self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)
                self.LastPickedProperty.DeepCopy(self.NewPickedActor.GetProperty())
                self.NewPickedActor.GetProperty().SetDiffuse(1.0)
                self.NewPickedActor.GetProperty().SetSpecular(0.0)
                self.LastPickedActor = self.NewPickedActor
            else:
                pass
        else:
            print("not on actor")
            self.on_actor = False

Update , the problem is solved, source code :

class MouseInteractorHighLightActor(vtk.vtkInteractorStyleTrackballCamera):
    def __init__(self, parent=None):
        self.AddObserver("LeftButtonPressEvent", self.leftButtonPressEvent)
        self.AddObserver("LeftButtonReleaseEvent", self.leftButtonReleaseEvent)
        self.AddObserver("MouseMoveEvent", self.MouseMove)
        self.LastPickedActor = None
        self.LastPickedProperty = vtk.vtkProperty()
        self.new = vtkTextActor()
        self.old = vtkTextActor()
        self.on_actor = False
        self.picker = vtk.vtkPropPicker()


    def add_text(self,renderer,ID):
        self.new.SetInput(ID)
        txtprop = self.new.GetTextProperty()
        txtprop.SetFontSize(72)
        self.new.SetDisplayPosition(0,0)
        self.old = self.new
        if self.on_actor:
            renderer.AddActor(self.new)
            # print("ID : ",ID)

    def MouseMove(self,obj,event):
        Mousepos = self.GetInteractor().GetEventPosition()
        picker = vtk.vtkPropPicker()
        picker.Pick(Mousepos[0], Mousepos[1], 0, self.GetDefaultRenderer())
        self.NewPickedActor = picker.GetActor()
        if self.NewPickedActor:
            self.on_actor = True
            # print("on actor")
            info = self.NewPickedActor.GetProperty().GetInformation()
            info = str(info)
            pattern_1 = re.compile(r"ID.*\d+")
            pattern_2 = re.compile(r"\d+")
            string = pattern_1.findall(info)[0]
            ID = pattern_2.findall(string)[0]
            # print("ID : ",ID)
            self.add_text(self.GetDefaultRenderer() , ID)
            
            if self.LastPickedActor:
                self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)

            self.LastPickedProperty.DeepCopy(self.NewPickedActor.GetProperty())
            self.NewPickedActor.GetProperty().SetDiffuse(1.0)
            self.NewPickedActor.GetProperty().SetSpecular(0.0)
            self.LastPickedActor = self.NewPickedActor
            self.OnLeftButtonDown()
            self.OnLeftButtonUp()
                    
        else:
            if self.LastPickedActor:
                self.LastPickedActor.GetProperty().DeepCopy(self.LastPickedProperty)
            self.on_actor = False
            self.GetDefaultRenderer().RemoveActor(self.new)
            self.GetDefaultRenderer().RemoveActor(self.old)
            self.OnLeftButtonDown()
            self.OnLeftButtonUp()

    def leftButtonPressEvent(self, obj, event):
        self.RemoveObservers("MouseMoveEvent")
        self.OnLeftButtonDown()

    def leftButtonReleaseEvent(self, obj, event):
        self.AddObserver("MouseMoveEvent",self.MouseMove)
        self.OnLeftButtonUp()


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source