How to hold a displaynode using python?

Hello, I have a doubt in holding a displaynode using python. I have two buttons and two displaynodes… Each button set visibility of each displaynode.I press first button. It will set visibility of corresponding display node and hold it.Then I press second button it will display both nodes.

Your code is obviously not correct. However, without providing the code itself, nobody has a chance to help you.

Hello, this is code contain three functions for three buttons and I have to hold the visibility of node after pressing each button . Here I used displaynode.hold(True). But it is not giving proper result.

def showTransparentRendering(self, volumeNode, maxOpacity, gradientThreshold):
        """Make constant regions transparent and the entire volume somewhat transparent
        :param maxOpacity: lower value makes the volume more transparent overall
            (value is between 0.0 and 1.0)
        :param gradientThreshold: regions that has gradient value below this threshold will be made transparent
            (minimum value is 0.0, higher values make more tissues transparent, starting with soft tissues)
        """
        # Get/create volume rendering display node
        volRenLogic = slicer.modules.volumerendering.logic()
        displayNode = volRenLogic.GetFirstVolumeRenderingDisplayNode(volumeNode)
        if not displayNode:
            displayNode = volRenLogic.CreateDefaultVolumeRenderingNodes(volumeNode)
        # Set up gradient vs opacity transfer function
        gradientOpacityTransferFunction = displayNode.GetVolumePropertyNode().GetVolumeProperty().GetGradientOpacity()
        gradientOpacityTransferFunction.RemoveAllPoints()
        gradientOpacityTransferFunction.AddPoint(300.0, 0.0)
        gradientOpacityTransferFunction.AddPoint(3070.0, maxOpacity)
        gradientOpacityTransferFunction.AddPoint(gradientThreshold+1, maxOpacity)
        TransferFunction=displayNode.GetVolumePropertyNode().GetVolumeProperty().GetScalarOpacity()
        TransferFunction.RemoveAllPoints()
        TransferFunction.AddPoint(300.0, 0.0)
        TransferFunction.AddPoint(3070.0, maxOpacity)
        TransferFunction.AddPoint(gradientThreshold+1, maxOpacity)
        displayNode.SetVisibility(True) 

    def onpushButton(self) -> None:
        """
        Run processing when user clicks "First Rendering" button.

        Calling update_parameters fuction for updating display of r1,r2,r3 parameters.

        Parameters:
                 r1:float
                 r2:float
                 r3:float
                 

        """
   
        self.logic.process_1(self.ui.inputSelector)
        
        """ Storing corresponding nodes in r1,r2,r3 parameters."""
        r1 = slicer.mrmlScene.GetFirstNodeByName('220074_pelvis')
        r2 = slicer.mrmlScene.GetFirstNodeByName('220074_knee')
        r3 = slicer.mrmlScene.GetFirstNodeByName("220074_ankle")
       
        """ Setting current node to r1."""
        self.ui.inputSelector.setCurrentNode(r1)
        volRenLogic1 = slicer.modules.volumerendering.logic()
        displayNode1 = volRenLogic1.CreateDefaultVolumeRenderingNodes(r1)
        displayNode1.hold(True)
        volumePropertyNode = displayNode1.GetVolumePropertyNode()
        preset = volRenLogic1.GetPresetByName('CT-AAA')
        volumePropertyNode.Copy(preset)
        self.showTransparentRendering(r1, 1,300.0)
  

        """  Accessing the volume rendering module.
             Creating a display node. 
             Setting visibility of corresponding node.
        """
        volRenLogic2 = slicer.modules.volumerendering.logic()
        displayNode2 = volRenLogic2.CreateDefaultVolumeRenderingNodes(r2)
        displayNode2.SetVisibility(False)
        """  Accessing the volume rendering module.
             Creating a display node. 
             Setting visibility of corresponding node.
        """
        volRenLogic3 = slicer.modules.volumerendering.logic()
        displayNode3 = volRenLogic3.CreateDefaultVolumeRenderingNodes(r3)
        displayNode3.SetVisibility(False)

     
    
        """ Center and fit displayed content in 3D view in the direction of anterior position."""
        view = slicer.app.layoutManager().threeDWidget(0).threeDController()
        view.resetFocalPoint()
        view.lookFromAxis(ctk.ctkAxesWidget.Anterior)
        view.setOrthographicModeEnabled(True)
     

        
    def onpushButton_2(self) -> None:
        """
        Run processing when user clicks "second Rendering" button.

        Calling update_parameters fuction for updating display of r1,r2,r3 parameters.

        Parameters:
                 r1:float
                 r2:float
                 r3:float
                 

        """
        
 
        self.logic.process_2(self.ui.inputSelector_1)

        """ Storing corresponding nodes in r1,r2,r3 parameters."""
        r1 = slicer.mrmlScene.GetFirstNodeByName('220074_pelvis')
        r2 = slicer.mrmlScene.GetFirstNodeByName('220074_knee')
        r3 = slicer.mrmlScene.GetFirstNodeByName("220074_ankle")
        """ Setting current node to r2."""
        self.ui.inputSelector_1.setCurrentNode(r2)
        volRenLogic2 = slicer.modules.volumerendering.logic()
        displayNode2 = volRenLogic2.CreateDefaultVolumeRenderingNodes(r2)
        displayNode2.hold(True)
        volumePropertyNode = displayNode2.GetVolumePropertyNode()
        preset = volRenLogic2.GetPresetByName('CT-AAA')
        volumePropertyNode.Copy(preset)
        self.showTransparentRendering(r2, 1, 300.0)
       
     
        """  Accessing the volume rendering module.
             Creating a display node. 
             Setting visibility of corresponding node.
        """
        volRenLogic1 = slicer.modules.volumerendering.logic()
        displayNode1 = volRenLogic1.CreateDefaultVolumeRenderingNodes(r1)
        displayNode1.SetVisibility(False)
        """  Accessing the volume rendering module.
             Creating a display node. 
             Setting visibility of corresponding node.
        """
        volRenLogic3 = slicer.modules.volumerendering.logic()
        displayNode3 = volRenLogic3.CreateDefaultVolumeRenderingNodes(r3)
        displayNode3.SetVisibility(False)
     
        """ Center and fit displayed content in 3D view in the direction of anterior position."""
        view1 = slicer.app.layoutManager().threeDWidget(0).threeDController()
        view1.resetFocalPoint()
        view1.lookFromAxis(ctk.ctkAxesWidget.Anterior)
        view1.setOrthographicModeEnabled(True)
   
       

        
  
        
    
    def onpushButton_3(self) -> None:
        """
        Run processing when user clicks "Third Rendering" button.

        Calling update_parameters fuction for updating display of r1,r2,r3 parameters.

        Parameters:
                 r1:float
                 r2:float
                 r3:float
                 

        """

 
        self.logic.process_3(self.ui.inputSelector_2)
        
        """ Storing corresponding nodes in r1,r2,r3 parameters."""
        r1 = slicer.mrmlScene.GetFirstNodeByName('220074_pelvis')
        r2 = slicer.mrmlScene.GetFirstNodeByName('220074_knee')
        r3 = slicer.mrmlScene.GetFirstNodeByName("220074_ankle")
        """ Setting current node to r3."""
        self.ui.inputSelector_2.setCurrentNode(r3)
        volRenLogic3 = slicer.modules.volumerendering.logic()
        displayNode3 = volRenLogic3.CreateDefaultVolumeRenderingNodes(r3)
       
        volumePropertyNode = displayNode3.GetVolumePropertyNode()
        preset = volRenLogic3.GetPresetByName('CT-AAA')
        volumePropertyNode.Copy(preset)
        self.showTransparentRendering(r3, 1, 300.0)
   
        """  Accessing the volume rendering module.
             Creating a display node. 
             Setting visibility of corresponding node.
        """
        volRenLogic1 = slicer.modules.volumerendering.logic()
        displayNode1 = volRenLogic1.CreateDefaultVolumeRenderingNodes(r1)
        displayNode1.SetVisibility(False)
        """  Accessing the volume rendering module.
             Creating a display node. 
             Setting visibility of corresponding node.
        """
        volRenLogic3 = slicer.modules.volumerendering.logic()
        displayNode3 = volRenLogic3.CreateDefaultVolumeRenderingNodes(r2)
        displayNode3.SetVisibility(False)
        """ Center and fit displayed content in 3D view in the direction of anterior position."""
        view2 = slicer.app.layoutManager().threeDWidget(0).threeDController()
        view2.resetFocalPoint()
        view2.lookFromAxis(ctk.ctkAxesWidget.Anterior)
        view2.setOrthographicModeEnabled(True)

Your code seems to be more complicated than it could be.

First of all, I suggest revising it carefully, because mixing up volume node numbers and display node numbers surely cause issues. For example
displayNode3 = volRenLogic3.CreateDefaultVolumeRenderingNodes(r2)
Here you’ll think that displayNode3 corresponds to volume r3, but it really corresponds to r2.