'值' 是一個標記爲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 callbacks cheatsheet