2017-04-23 52 views
1

我有一個從1到10的滑塊,我想存儲用戶每次使用滑塊選擇的值。我想讓該值隨滑塊的移動而更新。這是我迄今爲止如何在Python中存儲floatSliderGrp的值Maya

def PrintValue(): 
    print value 

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

我想通過在PASSVALUE參數是價值,是有一種方式來獲得從滑塊的價值?

回答

2

'值' 是一個標記爲floatSliderGrp - 不是一個變量。這就是爲什麼你不能直接打印。

根據你想要做什麼,你有兩種方法前進。

  1. 您可以存儲您創建的控件的名稱,然後詢問其他函數中的值。您可以使用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

1

使用模塊:局部

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

--- ---- EDIT 這裏是另一個交同樣的問題

How to create Maya sliders to move objects in interface