Python utilisation variable globale

Python utilisation variable globale - Python - Programmation

Marsh Posté le 06-12-2012 à 15:31:32    

Bonjour a tous,
 
je suis actuellement en train de realiser un tp pour mon ecole et je veux utiliser des variables globales car je reutilise les meme variables tout le long de mon programme.
Malheureusement j'ai une erreur que je n'arrive pas a résoudre sur un bout de mon code.
 
import time
import sys
import maya.cmds as cmds
 
global nbLignes
global nbColonnes
global profondeur
global retour
       
def interface():
       window=cmds.window()
       cmds.columnLayout()
       cmds.text( label='Nombre de lignes' )
       textFld1=cmds.textField('tFld1')
       cmds.text( label='Nombre de colonnes' )
       textFld2=cmds.textField('tFld2')
       cmds.text( label='Profondeur' )
       textFld3=cmds.textField('tFld3')
       but=cmds.button(l='add', c="res=valider()" )
       show=cmds.showWindow()
 
 
def valider(*args):
       global retour
       print(retour)
       nbLignes = cmds.textField('tFld1', query=True, text=True)
       nbColonnes = cmds.textField('tFld2', query=True, text=True)
       profondeur = cmds.textField('tFld3', query=True, text=True)
 
je test la variable global retour dans la fonction valider().
Mais j'obtiens toujours la meme erreur:
# Error: NameError: file <maya console> line 31: global name 'retour' is not defined #
 
J'aimerais detecter quand la fonction valider se termine pour pouvoir utiliser les variables NbLignes, NbColonne et profondeur qui comporte des valeurs que j'ai saisis.
Si cela n'est pas possible est ce que quelqu'un pourrait m'expliquer comment je pourrais attendre que la fonction valider ai été éxécuter pour passer la suite de mon code.
 
Merci d'avance

Reply

Marsh Posté le 06-12-2012 à 15:31:32   

Reply

Marsh Posté le 06-12-2012 à 15:44:58    

darhkan a écrit :

Bonjour a tous,
 
je suis actuellement en train de realiser un tp pour mon ecole et je veux utiliser des variables globales


C'est mal.

darhkan a écrit :

car je reutilise les meme variables tout le long de mon programme.


C'est pas vraiment une raison.

darhkan a écrit :

Code :
  1. global nbLignes
  2. global nbColonnes
  3. global profondeur
  4. global retour



Ce bordel là n'est pas correct, une variable globale ne se déclare pas spécialement. global est à utiliser dans une fonction voulant assigner à une variable globale, pour éviter qu'elle ne crée la même variable localement.

darhkan a écrit :

je test la variable global retour dans la fonction valider().
Mais j'obtiens toujours la meme erreur:
# Error: NameError: file <maya console> line 31: global name 'retour' is not defined #


Bah c'est normal, elle n'est jamais définie.

darhkan a écrit :

J'aimerais detecter quand la fonction valider se termine pour pouvoir utiliser les variables NbLignes, NbColonne et profondeur qui comporte des valeurs que j'ai saisis.
Si cela n'est pas possible est ce que quelqu'un pourrait m'expliquer comment je pourrais attendre que la fonction valider ai été éxécuter pour passer la suite de mon code.


Habituellement on utilise des concepts genre signaux ou évènements pour des notifications asynchrones dans ce genre. Après je connais pas du tout maya, donc j'en sais pas plus. Et de ce que je puisse en voire, je suis pas persuadé que ce soit le principe de fonctionnement des UIs MEL.
 
Pourquoi ne pas lancer "la suite de ton code" depuis valider, un truc du style?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 06-12-2012 à 15:49:19    

Je vais tester de tout lancer depuis la fonction valider.
J'ai la tete dedans toute la journée je ne vois plus les solutions les plus simple.
Je vais essayer sans les variables globales.
Merci pour ta réponse

Reply

Marsh Posté le 06-12-2012 à 17:39:23    

J'ai un autre soucis qui se présente.
Et j'avoue que j'arrive vraiment pas a comprendre comment fonctionne Maya.
J'ai reussi a lancer mon code, il s'est executé parfaitement 4-5 fois et la comme par magie ca ne marche plus alors que j'ai rien touché.
J'obtiens :
# Error: NameError: file <maya console> line 29: global name 'window' is not defined #  
 
La partie de code concernée:
def interface():
 window=cmds.window()
 cmds.columnLayout()
 cmds.text( label='Nombre de lignes' )
 textFld1=cmds.textField('tFld1')
 cmds.text( label='Nombre de colonnes' )
 textFld2=cmds.textField('tFld2')
 cmds.text( label='Profondeur' )
 textFld3=cmds.textField('tFld3')
 but=cmds.button(l='add', c=valider)
 show=cmds.showWindow(window)
 
 
def valider(*args):
 nbLignes = int(cmds.textField('tFld1', query=True, text=True))
 nbColonnes = int(cmds.textField('tFld2', query=True, text=True))
 profondeur = int(cmds.textField('tFld3', query=True, text=True))
L.29  cmds.deleteUI(window)
 traitement=0
 if(nbLignes!=0 and nbColonnes!=0 and profondeur==0):  
  creerGrilleMaya(nbLignes,nbColonnes)
  while traitement<10:

Reply

Marsh Posté le 06-12-2012 à 17:40:39    

En gros il ne connait plus le "window" dans ma commande:
cmds.deleteUI(window) , alors que j'utilise (*args) comme paramètre de la fonction.
J'aurais bien besoin d'une explication

Reply

Marsh Posté le 06-12-2012 à 19:41:50    

darhkan a écrit :

En gros il ne connait plus le "window" dans ma commande:
cmds.deleteUI(window) , alors que j'utilise (*args) comme paramètre de la fonction.
J'aurais bien besoin d'une explication


Je vois pas le rapport. window c'est window, args c'est args. ici, window est une variable locale à la fonction interface, elle n'est pas visible dans la fonction valider, pour autant que je le sache.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed