如何在 Python Maya 中存储 floatSliderGrp 的值

How to store the value of floatSliderGrp in Python Maya

我有一个从 1 到 10 的滑块,我想存储用户每次使用滑块选择的值。我希望值随着滑块的移动而更新。这是我目前所拥有的

def PrintValue():
    print value

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

我想传递 PASSVALUE 参数所在的值,有没有办法从滑块获取值?

使用模块:部分

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

---编辑---- 这是另一个 post 有同样的问题

How to create Maya sliders to move objects in interface

'value' 是 floatSliderGrp 的标志——不是变量。所以不能直接打印出来。

根据您想做什么,您有两种前进的方式。

  1. 您可以存储您创建的控件的名称,然后在其他函数中请求该值。您可以使用 partial 将控件名称绑定到函数,或者您可以重新排序创建它们的方式,以便在创建函数时知道它们关心的 UI 元素的名称。在这种情况下,您不会在滑块上放置命令,而是在需要知道滑块值的其他东西上放置
  2. 您可以创建一个变量并在滑块值更改时更新它。如果许多不同的工具需要知道该值,一个不错的选择是创建一个 class 并将滑块值插入其中。然后其他代码可以只获取值而不关心 UI。如果您想在滑块变化时在场景中执行某些操作,您可以更改 update_slider_value() 函数以在滑块移动时执行操作。

这是方法 1。它不会尝试挂钩滑块上的 dc 事件 - 它只记住滑块对象的名称并在需要知道时查询值:

 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)

这是使用方法 #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()

任何知道 example 的人都可以询问 example.value 并获取当前滑块值。这对于更复杂的情况很有用,但对于简单的事情就有点过分了。

相关信息:Maya callbacks cheatsheet