我有一个从 1 到 10 的滑块,我想存储用户每次使用滑块选择的值。我希望值随着滑块的移动而更新。这是我到目前为止所拥有的
def PrintValue():
print value
cmds.floatSliderGrp(label='Angle', field=True, minValue=0.0, maxValue=10.0,
value=0 ,dc=PrintValue(PASSVALUE) )
我想传递 PASSVALUE 参数所在的值,有没有办法从滑块中获取值?
'value' 是 floatSliderGrp 的标志——不是变量。这就是为什么你不能直接打印它。
根据你想要做什么,你有两种前进的方式。
partial将控件名称绑定到函数,或者您可以重新排序创建它们的方式,以便在创建函数时知道它们关心的 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 回调备忘单
使用模块:部分
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))
---编辑--- 这是另一个有同样问题的帖子