Gracias Gracias:  0
Resultados 1 al 2 de 2

Tema: Python scope

  1. #1
    Senior Member
    Fecha de ingreso
    May 2005
    Ubicación
    Colombia y Argentina
    Mensajes
    260

    Python scope

    Buenas foreros!!

    Hice un script para Maya en MEL y como ejercicio para acordarme un poco de la sintaxis de Python me puse a pasarlo a Python.

    El problema es que tengo objetos de la interfaz definidos en una función y comandos que hacen Query de esos objetos dentro de otras funciones. Cuando trato de hacer esto el Python obviamente me tira un Error diciendome que el objeto no existe ( porque esta en el scope de otra funcion). A continuación un ejemplo:

    Código:
    import maya.cmds as cmds
    
    def meCambiaron () :
    	if cmds.checkBox("miCHKBOX", que = True, enable = True) != True :
    		cmds.checkBox("miOtroCHKBOX", e = True, enable = False)
    	else :
    		cmds.checkBox("miOtroCHKBOX", e = True, enable = True) 
    
    def crearVentana ():
    	cmds.window("miVentanaUI", title = "miVentanaUI", wh = (282,200) )
    	cmds.columnLayout("mainCol", adj = True)
    	cmds.checkBox("miCHKBOX", label = "miCHKBOX", v = False, changeCommand = meCambiaron())
    	cmds.checkBox("miOtroCHKBOX", label = "miOtroCHKBOX", v = True, enable = False)
    	cmds.showWindow("miVentanaUI")
    El error es este: # Error: RuntimeError: file <maya console> line 5: Object 'miCHKBOX' not found.

    Para solucionar esto en MEL simplemente defino la función crearVentana como "global proc", pero no se si esto se pueda hacer en Python.

    Muchas gracias por leer, espero que alguien me pueda dar una mano.

    Saludo!!

  2. #2
    Senior Member
    Fecha de ingreso
    May 2005
    Ubicación
    Colombia y Argentina
    Mensajes
    260

    Re: Python scope

    El usuario mduvekot de CGTalque me propuso esta solucion, que funciona perfectamente:

    Código:
    def changedValue(*args):
        if (cmds.checkBox("myCHKBOX" , que = True, value = True) != True) :
            cmds.checkBox("myOtherCHKBOX" , e = True, enable  = False)
        else :
            cmds.checkBox("myOtherCHKBOX" , e = True, enable  = True)  
            
    def createWindow():
        if (cmds.window ('myWindowUI', exists=True)) :
            cmds.deleteUI ('myWindowUI')
        cmds.window("myWindowUI" , title = "myWindowUI" , wh = (282,200) )
        cmds.columnLayout("mainCol" , adj = True)	
        cmds.checkBox("myCHKBOX" , label = "myCHKBOX" , v = False, changeCommand = changedValue)
        cmds.checkBox("myOtherCHKBOX" , label = "myOtherCHKBOX" , v = True, enable = False)
        cmds.showWindow("myWindowUI")
    
    createWindow()
    Dos diferencias importantes con mi codigo: el changeCommand no tiene () pero al poner solo esto Python devuelve otro error respecto al número de argumentos. Eso lo soluciono mduvekot con el *args

    Para saber más de *args : http://nicolasgiorgetti.com.ar/blog/?p=1171

    Saludo!!
    Última edición por Xian; 06-12-2010 a las 23:39

Temas similares

  1. Python
    Por JEMV en el foro Videojuegos
    Respuestas: 1
    Último mensaje: 05-09-2009, 18:54
  2. Python en Max
    Por taidan en el foro Programación y Scripts
    Respuestas: 1
    Último mensaje: 03-06-2008, 11:39
  3. Python
    Por marceze en el foro Problemas con Programas
    Respuestas: 9
    Último mensaje: 17-09-2007, 23:01
  4. Python
    Por jeenyus en el foro Programación y Scripts
    Respuestas: 7
    Último mensaje: 03-02-2007, 01:43
  5. aPI de Python
    Por Klópes en el foro Plugins
    Respuestas: 3
    Último mensaje: 24-03-2006, 12:11

Actualmente estos son sus permisos de publicación en el foro.

  • -No puedes crear nuevos temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes responder temas al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes subir archivos adjuntos al no estar registrado o no haber iniciado sesión en el foro.
  • -No puedes editar tus mensajes al no estar registrado o no haber iniciado sesión en el foro.
  •