-
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.
-
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.