如何在 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 的标志——不是变量。所以不能直接打印出来。
根据您想做什么,您有两种前进的方式。
- 您可以存储您创建的控件的名称,然后在其他函数中请求该值。您可以使用
partial
将控件名称绑定到函数,或者您可以重新排序创建它们的方式,以便在创建函数时知道它们关心的 UI 元素的名称。在这种情况下,您不会在滑块上放置命令,而是在需要知道滑块值的其他东西上放置
- 您可以创建一个变量并在滑块值更改时更新它。如果许多不同的工具需要知道该值,一个不错的选择是创建一个 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
并获取当前滑块值。这对于更复杂的情况很有用,但对于简单的事情就有点过分了。
我有一个从 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 的标志——不是变量。所以不能直接打印出来。
根据您想做什么,您有两种前进的方式。
- 您可以存储您创建的控件的名称,然后在其他函数中请求该值。您可以使用
partial
将控件名称绑定到函数,或者您可以重新排序创建它们的方式,以便在创建函数时知道它们关心的 UI 元素的名称。在这种情况下,您不会在滑块上放置命令,而是在需要知道滑块值的其他东西上放置 - 您可以创建一个变量并在滑块值更改时更新它。如果许多不同的工具需要知道该值,一个不错的选择是创建一个 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
并获取当前滑块值。这对于更复杂的情况很有用,但对于简单的事情就有点过分了。