Cómo almacenar el valor de floatSliderGrp en Python Maya

Tengo un control deslizante que va del 1 al 10 y quiero almacenar el valor que el usuario eligió con el control deslizante cada vez. Quiero que el valor se actualice con el movimiento del control deslizante. Esto es lo que tengo hasta ahora.

def PrintValue(): print value cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0 ,dc=PrintValue(PASSVALUE) ) 

Quiero pasar el valor donde está el argumento PASSVALUE, ¿hay alguna forma de obtener el valor del control deslizante?

Related of "Cómo almacenar el valor de floatSliderGrp en Python Maya"

‘valor’ es un indicador para el floatSliderGrp, no una variable. Por eso no puedes imprimirlo directamente.

Dependiendo de lo que quieras hacer, tienes dos formas de avanzar.

  1. Puede almacenar el nombre del control que ha creado y luego solicitar el valor en otras funciones. Puede usar partial para vincular nombres de control a funciones, o simplemente puede reordenar la forma en que los crea, de modo que las funciones se creen sabiendo los nombres de los elementos de la interfaz de usuario que les interesan. No pone un comando en el control deslizante en este caso, sino en otra cosa que necesita saber el valor del control deslizante
  2. puede crear una variable y actualizarla siempre que cambie el valor del control deslizante. Si muchas herramientas diferentes necesitan saber el valor, una buena opción es crear una clase y meter el valor del control deslizante en ella. Luego, otro código puede tomar el valor sin preocuparse por la interfaz de usuario. Si desea hacer algo en la escena cuando cambia el control deslizante, puede cambiar la función update_slider_value() para hacer cosas a medida que se mueve el control deslizante.

Aquí está el enfoque # 1. No intenta enganchar el evento dc en el control deslizante, solo recuerda el nombre de los objetos del control deslizante y consulta el valor cuando necesita saberlo:

  wnd = cmds.window() col = cmds.columnLayout() slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0) b = cmds.button('print value') # since this is defined after `slider`, it knows the value def print_value(*_): print cmds.floatSliderGrp(slider, q=True, v=True) cmds.button(b, e=True, c=print_value) cmds.showWindow(wnd) 

Aquí es lo mismo logrado con el enfoque # 2:

 class SliderWindow(object): def __init__(self): self.value = 0 self.window = cmds.window(title ="SliderWindow") self.column = cmds.columnLayout() self.slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0, dc= self.update_slider_value) cmds.button('print value', c= self.print_value) cmds.showWindow(self.window) def update_slider_value(self, *_): self.value = cmds.floatSliderGrp(self.slider, q=True, v=True) def print_value(self, *_): print self.value example = SliderWindow() 

Cualquiera que sepa el example puede simplemente pedir un valor de example.value y obtener el valor actual del control deslizante. Esto es bueno para casos más complejos, pero excesivo para cosas simples.

Información relacionada: Maya callbacks cheatsheet

utilizar el módulo: parcial

 form functools import partial #update the query of the slider def getSliderValue(sliderName): return cmds.floatSliderGrp(sliderName, q=1, v=1) #funciton for the ui def PrintValue(sliderName, *args): value = getSliderValue(sliderName) print value #define slider into var Slider = cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0, value=0, dc='placeholder' ) #now that we have the name of the slider, edit the function to pass it throught cmds.floatSliderGrp(Slider , e=True, dc= partial(PrintValue, Slider)) 

— EDITAR —- Aquí hay otro post con la misma pregunta

Cómo crear controles deslizantes mayas para mover objetos en la interfaz