Boutique Cinema 4D
Affichage des résultats 1 à 6 sur 6

Discussion: Scripts python et dialogues asynchrone

Mode arborescent

  1. #1
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707

    Scripts python et dialogues asynchrone

    Un petit problème qui m'a valu une bonne prise de tête :

    J’ai longtemps cru que les dialogues asynchrones, c’est à dire un dialogue que l’on peut « docker » et qui reste actif sans bloquer les autres fonctionnalités, étaient réservés aux plugins dans Cinema4D. Puis un jour je tombe sur un bout de code qui fonctionnait, même avec un script. J'ai pensé que c'était une amélioration de la r17. Je développe un super dialogue, je copie je colle dans un autre script et paf, cela ne marchait plus. J'ai mis un bon moment à trouver pourquoi et je vous livre mes conclusions.


    Un exemple simple :
    Code PHP:

    import c4d

    class MonDlgc4d.gui.GeDialog):
        
        
    def CreateLayout(self):
            
    self.AddStaticText(1000c4d.BFH_SCALE|c4d.BFV_SCALEinitw=100inith=20,name 'Hello world !')        
            return 
    True

    def main
    ():
        
    dlg MonDlg()
        
    dlg.Open(c4d.DLG_TYPE_ASYNC)

    if 
    __name__=='__main__':
        
    main() 
    Si on lance le script et que l'on essaie de modifier la taille de la fenêtre, le contenu disparaît
    En fait c'est une bête histoire de portée de variables, la variable dlg est effacée à la fin du code. Par contre si je déclare dlg en global tout fonctionne:
    Code PHP:
    import c4d

    class MonDlgc4d.gui.GeDialog):
        
        
    def CreateLayout(self):
            
    self.AddStaticText(1000c4d.BFH_SCALE|c4d.BFV_SCALEinitw=100inith=20,name 'Hello world !')        
            return 
    True

    def main
    ():
        global 
    dlg
        dlg 
    MonDlg()
        
    dlg.Open(c4d.DLG_TYPE_ASYNC)

    if 
    __name__=='__main__':
        
    main() 
    Sinon plus simplement, si on crée notre dialogue dans if __name__=='__main__': sans passer par une fonction, tout va bien !
    Code PHP:
    import c4d

    class MonDlgc4d.gui.GeDialog):
        
        
    def CreateLayout(self):
            
    self.AddStaticText(1000c4d.BFH_SCALE|c4d.BFV_SCALEinitw=100inith=20,name 'Hello world !')        
            return 
    True

    if __name__=='__main__':
        
    dlg MonDlg()
        
    dlg.Open(c4d.DLG_TYPE_ASYNC
    Dernière modification par oli_d ; 03/12/2015 à 07h43.

Discussions similaires

  1. Petits Scripts, Python
    Par ksaa dans le forum Programmation
    Réponses: 51
    Dernier message: 29/09/2012, 13h12
  2. Python : Boîte de dialogue asynchrone
    Par César Vonc dans le forum Programmation
    Réponses: 2
    Dernier message: 20/04/2012, 22h33
  3. Python Scripts phidek
    Par phidek dans le forum Programmation
    Réponses: 8
    Dernier message: 22/06/2011, 18h41
  4. Scripts divers python by oli_d
    Par oli_d dans le forum Programmation
    Réponses: 48
    Dernier message: 14/05/2011, 08h37
  5. C++ : boîte de dialogue
    Par Glloq dans le forum Programmation
    Réponses: 6
    Dernier message: 30/03/2011, 23h10

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet