How to send a variable to a sub dialog



  • On 26/12/2016 at 19:49, xxxxxxxx wrote:

    Hello there,

    How can I send the variable "Value" from the main dialog to the sub dialog, check script and screenshot below :

    import c4d  
    from c4d import gui, bitmaps  
      
    NO = 21549  
    YES = 21547  
    CHECK_ICON = 21548  
      
    class subDialog(gui.GeDialog) :  
      def CreateLayout(self) :      
          self.SetTitle("Sub Dialog")     
          self.GroupBegin(id=0, flags=c4d.BFH_SCALEFIT, cols=2)  
          self.GroupBorderSpace(0, 0, 10, 0)  
      
          bc = c4d.BaseContainer()     
          fn = bitmaps.InitResourceBitmap(c4d.Tprotection)  
          self.myBitButton=self.AddCustomGui(CHECK_ICON, c4d.CUSTOMGUI_BITMAPBUTTON, "Bitmap Button", c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, 50, 50, bc)  
          self.myBitButton.SetImage(fn, False)  
        
          self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=1)  
          self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "The value " + **str(Value)** \+ " is higher than the recommended value", c4d.BORDER_NONE) **# Send the variable "Value" here**  
          self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "Press YES to continue or NO to cancel", c4d.BORDER_NONE)  
          self.GroupEnd()  
            
          self.GroupEnd()  
            
          self.AddSeparatorH(0, c4d.BFH_SCALEFIT)  
            
          self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=2)  
          self.AddButton(YES, c4d.BFH_CENTER, 30, 15, name="YES")  
          self.AddButton(NO, c4d.BFH_CENTER, 30, 15, name="NO")  
          self.GroupEnd()  
            
          return True    
      
      def Command(self, id, msg) :        
          if (id == YES) :  
              self.Response = True  
              self.Close()  
      
          if (id == NO) :  
              self.Response = False  
              self.Close()  
          return True   
        
    class mainDialog(c4d.gui.GeDialog) :  
      
      def CreateLayout(self) :        
          self.SetTitle("Main Dialog")      
          self.AddButton(11001, c4d.BFH_SCALEFIT, 0, 20, "Open Sub Dialog")          
          return True      
      def Command(self, id, msg) :  
          if id == 11001:  
              **Value = 1800 # How to send this variable to the sub dialog**  
              if Value > 1500 :    
                  self.subDialog = subDialog()  
                  self.subDialog.Open(dlgtype=c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=0)  
                
                  if self.subDialog.Response == True :  
                      print self.subDialog.Response  
                  else :  
                      print self.subDialog.Response    
            
          return True  
    def main() :  
      global mainDialog  
      mainDialog = mainDialog()  
      mainDialog.Open(c4d.DLG_TYPE_MODAL, xpos=700, ypos= 200, defaultw=516, defaulth=10)  
        
      return True  
    if __name__=='__main__':  
      main()
    

    Thanks.



  • On 27/12/2016 at 02:39, xxxxxxxx wrote:

    Hi,

    You can simply pass the value via the constructor ( __init__() ) of your SubDialog class and store it as a member. You should initialize the  Response member there too.
    And you can also have methods in the  _SubDialog  _class to get and set the value.



  • On 29/12/2016 at 07:41, xxxxxxxx wrote:

    Hi, Thanks for your helpful comment.

    The modified script :

    import c4d  
    from c4d import gui, bitmaps  
      
    NO = 21549  
    YES = 21547  
    CHECK_ICON = 21548  
      
    class subDialog(gui.GeDialog) :  
        
      **def __init__(self, Value) :  
          self.Value = Value**  
            
      def CreateLayout(self) :     
          self.SetTitle("Sub Dialog")    
          self.GroupBegin(id=0, flags=c4d.BFH_SCALEFIT, cols=2)  
          self.GroupBorderSpace(0, 0, 10, 0)  
      
          bc = c4d.BaseContainer()    
          fn = bitmaps.InitResourceBitmap(c4d.Tprotection)  
          self.myBitButton=self.AddCustomGui(CHECK_ICON, c4d.CUSTOMGUI_BITMAPBUTTON, "Bitmap Button", c4d.BFH_SCALEFIT | c4d.BFV_SCALEFIT, 50, 50, bc)  
          self.myBitButton.SetImage(fn, False)  
      
          self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=1)  
          self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "The value " + **str(self.Value)** \+ " is higher than the recommended value", c4d.BORDER_NONE) # Send the variable "Value" here  
          self.AddStaticText(7, c4d.BFH_LEFT, 0, 0, "Press YES to continue or NO to cancel", c4d.BORDER_NONE)  
          self.GroupEnd()  
           
          self.GroupEnd()  
           
          self.AddSeparatorH(0, c4d.BFH_SCALEFIT)  
           
          self.GroupBegin(id=0, flags=c4d.BFH_CENTER, cols=2)  
          self.AddButton(YES, c4d.BFH_CENTER, 30, 15, name="YES")  
          self.AddButton(NO, c4d.BFH_CENTER, 30, 15, name="NO")  
          self.GroupEnd()  
           
          return True   
        
      def Command(self, id, msg) :       
          if (id == YES) :  
              self.Response = True  
              self.Close()  
      
          if (id == NO) :  
              self.Response = False  
              self.Close()  
          return True  
      
    class mainDialog(c4d.gui.GeDialog) :  
      
      def CreateLayout(self) :       
          self.SetTitle("Main Dialog")     
          self.AddButton(11001, c4d.BFH_SCALEFIT, 0, 20, "Open Sub Dialog")         
          return True     
      def Command(self, id, msg) :  
          if id == 11001:  
              Value = 1800 # How to send this variable to the sub dialog  
              if Value > 1500 :   
                  **self.subDialog = subDialog(Value)**  
                  self.subDialog.Open(dlgtype=c4d.DLG_TYPE_MODAL, defaultw=300, defaulth=0)  
               
                  if self.subDialog.Response == True :  
                      print self.subDialog.Response  
                  else :  
                      print self.subDialog.Response   
           
          return True  
    def main() :  
      global mainDialog  
      mainDialog = mainDialog()  
      mainDialog.Open(c4d.DLG_TYPE_MODAL, xpos=700, ypos= 200, defaultw=516, defaulth=10)  
      
      return True  
    if __name__=='__main__':  
      main()
    

Log in to reply