Maxon Developers Maxon Developers
    • Documentation
      • Cinema 4D Python API
      • Cinema 4D C++ API
      • Cineware API
      • ZBrush Python API
      • ZBrush GoZ API
      • Code Examples on Github
    • Forum
    • Downloads
    • Support
      • Support Procedures
      • Registered Developer Program
      • Plugin IDs
      • Contact Us
    • Categories
      • Overview
      • News & Information
      • Cinema 4D SDK Support
      • Cineware SDK Support
      • ZBrush 4D SDK Support
      • Bugs
      • General Talk
    • Unread
    • Recent
    • Tags
    • Users
    • Login

    How to update a variable in a dialog?

    Scheduled Pinned Locked Moved PYTHON Development
    5 Posts 0 Posters 531 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • H Offline
      Helper
      last edited by

      On 11/02/2017 at 13:53, xxxxxxxx wrote:

      Hello there,

      How to update a variable in a dialog "CreateLayout(self)".
      in the script below I want to passing the value from the path field or the self.DIRECTORY to the variable "dirs".

      import c4d, re, os  
      from c4d import gui  
        
      class Dialog(c4d.gui.GeDialog) :  
        SELECT_DIR = 40  
                      
        def CreateLayout(self) :          
            self.GroupBegin(0,c4d.BFH_SCALEFIT,3,0,"");  
            self.AddStaticText(0, c4d.BFH_RIGHT, 0, 0, "Path :", c4d.BORDER_NONE)  
            **self.AddEditText(1, c4d.BFH_SCALEFIT, 250, 15)** **#Path to pass**  
            self.AddButton(self.SELECT_DIR, flags=c4d.BFH_RIGHT,inith=15, name="...")         
            self.GroupEnd()  
              
            self.AddComboBox(1000, c4d.BFH_SCALEFIT, 0, 15)           
            self.AddChild(1000,0,"Folders :&i" + str(c4d.RESOURCEIMAGE_OPENED) + "&" )  
            self.AddChild(1000,0,"")  
         
            **dirs = os.listdir(os.path.join( self.GetString(1))) # Passing the path value or the self.DIRECTORY here**  
       **         # or** **:  
            # dirs = os.listdir(os.path.join(** ** ** ** **self.DIRECTORY****** )) **       
            id = 2000  
            for plugin_name in dirs:          
                self.AddChild(1000,id,plugin_name)  
                id += 1  
            return True   
        
        def UpdateDlg(self, id) :  
            self.SetString(1,self.DIRECTORY)          
            return True  
          
        def Command(self, id, msg) :  
            if id == self.SELECT_DIR:  
                **self.DIRECTORY** = c4d.storage.LoadDialog(flags=c4d.FILESELECT_DIRECTORY)  
            self.UpdateDlg(self.GetLong(1000))  
        
            return True  
          
        def CoreMessage(self, id, msg) :  
            if id==c4d.EVMSG_CHANGE:  
                self.UpdateDlg(self.GetBool(self.DIRECTORY))  
            return True  
          
      def main() :  
        global Dialog  
        Dialog = Dialog()  
        Dialog.Open(c4d.DLG_TYPE_MODAL, xpos=700, ypos= 200, defaultw=516, defaulth=10)      
        return True  
      if __name__=='__main__':  
        main()
      

      I want to obtain this result:

      Thanks

      1 Reply Last reply Reply Quote 0
      • H Offline
        Helper
        last edited by

        On 13/02/2017 at 01:49, xxxxxxxx wrote:

        Hi,

        To dynamically update the ComboBox children list, just call self.AddChild() in Command() with the sub-directories returned by os.listdir().
        The ComboBox is updated automatically because this doesn't change the layout of the dialog.

        1 Reply Last reply Reply Quote 0
        • H Offline
          Helper
          last edited by

          On 13/02/2017 at 04:51, xxxxxxxx wrote:

          Originally posted by xxxxxxxx

          Hi,
          To dynamically update the ComboBox children list, just call self.AddChild() in Command() with the sub-directories returned by os.listdir().
          The ComboBox is updated automatically because this doesn't change the layout of the dialog.

          Hi,

          Sorry, I wasn't clear on your response, please can you give me a small example?

          Thanks.

          1 Reply Last reply Reply Quote 0
          • H Offline
            Helper
            last edited by

            On 13/02/2017 at 04:57, xxxxxxxx wrote:

            Originally posted by xxxxxxxx

            Originally posted by xxxxxxxx

            Hi,
            To dynamically update the ComboBox children list, just call self.AddChild() in Command() with the sub-directories returned by os.listdir().
            The ComboBox is updated automatically because this doesn't change the layout of the dialog.

            Hi,

            Sorry, I wasn't clear on your response, please can you give me a small example?

            Thanks.

            Simply move your loop with self.AddChild() from CreateLayout() to Command() and the if for the directory selection. CreateLayout() doesn't get called every time a command or an interaction in the dialog happens.

            1 Reply Last reply Reply Quote 0
            • H Offline
              Helper
              last edited by

              On 13/02/2017 at 05:33, xxxxxxxx wrote:

              def Command(self, id, msg) :  
                dirs = os.listdir(os.path.join(self.GetString(1)))          
                id = 2000  
                for plugin_name in dirs:          
                    self.AddChild(1000,id,plugin_name)  
                    id += 1
              

              I tried this but nothing happen.

              1 Reply Last reply Reply Quote 0
              • First post
                Last post