'value' 是 floatSliderGrp 的标志——不是变量。这就是为什么你不能直接打印它。
根据你想要做什么,你有两种前进的方式。
- 您可以存储您创建的控件的名称,然后在其他函数中询问该值。您可以使用
partial
将控件名称绑定到函数,或者您可以重新排序创建它们的方式,以便在创建函数时知道它们关心的 UI 元素的名称。在这种情况下,您不会在滑块上放置命令,而是在需要知道滑块值的其他东西上
- 您可以创建一个变量并在滑块值更改时对其进行更新。如果许多不同的工具需要知道该值,一个不错的选择是创建一个类并将滑块值插入其中。然后其他代码可以直接获取值而不关心 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 回调备忘单