2017-10-19 7 views
0

J'ai créé une interface utilisateur avec une liste déroulante et un bouton. J'essaie d'ajouter un message d'erreur si le bouton est cliqué mais rien n'a été sélectionné dans la liste déroulante. J'ai ajouté le message d'erreur dans la fonction de clic sur le bouton et cela fonctionne parfaitement. Mon problème se produit lorsque j'essaie d'effacer/cacher le message dans la fonction de commande de changement. J'ai l'erreur "Trop d'enfants dans la mise en page". J'ai lu où les éléments de mise en page devaient inclure le parent, donc je me suis assuré que tout était parenté. J'ai essayé setParent et l'attribut parent de l'élément, mais cela n'a pas fait de différence. J'ai essayé de changer le nombre de colonnes sur le errRowLayout à 2. Cela s'est débarassé de l'erreur de disposition, mais il n'a pas effacé mon message. J'ai également découvert que le code fonctionnerait dans l'une ou l'autre des fonctions, mais pas dans les deux. Je me suis cogné la tête contre le mur tout l'après-midi en essayant de comprendre cela. Je suis sûr que c'est quelque chose de très simple que j'ai oublié.Impossible de modifier la commande de texte Python dans la fonction optionChange changeCommand

Ce sont les lignes de code pertinentes.

# this is called from another function 
def createCustom(self): 
    self.characterOptionMenu = pm.optionMenu('characterOptionMenu', w=self.windowWidth, label=' Choose a Character:', changeCommand=self.item_change, parent=self.mainLayout)  
    self.errRowLayout = pm.rowLayout(numberOfColumns=1, columnWidth=[1, self.windowWidth], columnAlign=[1, 'center'], parent=self.mainLayout) 
    self.buttonRowLayout = pm.rowLayout(numberOfColumns=1, width=self.windowWidth, parent=self.mainLayout) 
    pm.button("Setup Character", w=self.windowWidth, h=30, command=self.setup_button_click, parent=self.buttonRowLayout)I 

def setup_button_click(self, *args): 
    selectedCharacter = pm.optionMenu(self.characterOptionMenu, q=True, value=True) 

    if selectedCharacter == ' ': 
     # create the error message 
     # this statement works 
     pm.text(label='Character cannot be blank.', visible=True, backgroundColor=[250, 128, 114], font='boldLabelFont', width=self.windowWidth, parent=self.errRowLayout) 
     return 

def item_change(self, *args): 
    selectedCharacter = pm.optionMenu(self.characterOptionMenu, q=True, value=True) 
    # this statement gives me the layout error 
    pm.text(label='', visible=False, parent=self.errRowLayout) 

Toute aide est grandement appréciée.

Répondre

0

On dirait que vous êtes créant une nouvelle étiquette de texte. Dans setup_button_click(), vous avez déjà créé une étiquette de texte, puis vous essayez d'en créer une autre avec le même parent. Cela devrait expliquer l'erreur.

Voir la documentation sur:

http://download.autodesk.com/us/maya/2011help/commandspython/text.html

Vous devriez probablement essayer d'obtenir le nom de chemin complet de votre commande d'étiquettes de texte, puis appelez texte() avec modifier = true.

+0

Merci, @Icyvapor. Je vois ce que vous dites. J'essayais de mettre à jour ce texte plutôt que d'en créer un autre. Dans cet esprit, j'ai essayé d'assigner l'étiquette de texte à une variable dans la fonction setup_button_click. Ensuite, j'ai défini l'attribut visible de cette variable sur False dans la fonction item_change. Changer l'attribut n'a pas masqué le message d'erreur. Ai-je besoin de rafraîchir quelque chose pour que la nouvelle valeur de l'attribut visible soit reconnue? – doubler