Resultados 1 al 2 de 2

Tema: Python Scope

  1. #1
    Fecha de ingreso
    May 2005
    Mensajes
    259

    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 diciéndome que el objeto no existe (porque está en el scope de otra función). 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) telse:
    Cmds, checkbox(miotrochkbox, e = true, enable = true).
    
    Def crearventana ():
    Cmds.window(miventanaui, title = miventanaui, wh = (282,200)) tcmds, columnlayout(maincol, adj = true) tcmds, checkbox(michkbox, label = michkbox, v = false, changecommand = mecambiaron()) tcmds, checkbox(miotrochkbox, label = miotrochkbox, v = true, enable = false) tcmds, 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 sé si esto se pueda hacer en Python. Muchas gracias por leer, espero que alguien me pueda dar una mano. Saludo.

  2. #2
    Fecha de ingreso
    May 2005
    Mensajes
    259

    Python scope

    El usuario mduvekot de CGtalk me propuso esta solución, 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 código: el changecommand no tiene () pero al poner solo esto Python devuelve otro error respecto al número de argumentos. Eso lo solucionó 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 21:39

Temas similares

  1. Blender Playaction python BGE
    Por Juani en el foro Programación y Scripts
    Respuestas: 0
    : 22-01-2016, 17:25
  2. Blender Set visible Python BGE
    Por Juani en el foro Programación y Scripts
    Respuestas: 0
    : 16-01-2016, 07:30
  3. Blender Smooth en python
    Por Husalban en el foro Programación y Scripts
    Respuestas: 3
    : 12-04-2010, 08:37
  4. Python en 3ds Max
    Por taidan en el foro Programación y Scripts
    Respuestas: 1
    : 03-06-2008, 10:39
  5. Api de Python
    Por Klópes en el foro Plugins
    Respuestas: 2
    : 24-03-2006, 09:46