2017-03-22 3 views
0

질문이 있습니다 ... 파이썬에서 스크립트를 만들고 있습니다 ... 값을 삽입 할 슬라이더가 있습니다. 그러나 일부 값을 원합니다 함수, 다른 함수에 다른 함수 ... 다른 하나의 단일 함수 (작업)에있는 모든 함수를 전달할 수있는 스크립트는 다음과 같습니다. 그리고 주석에서 내가 필요로하는 것에 대해 작업했을 것이라고 생각했던 선 ,하지만 그렇지 않습니다.한 번에 다른 함수에 다른 값을 전달하는 방법

import maya.cmds as cmds 

#def function1(value): 
def function1(value1,value2): 
    print(value1) 

def function2(value): 
    print(value) 

def createUI(): 
    cmds.window("Window") 
    cmds.columnLayout(adjustableColumn=True) 
    value1 = cmds.intSliderGrp(label='number of moons', minValue=4, maxValue=20, value=12, field=True) 
    value2 = cmds.intSliderGrp(label='Distance from parent to child', minValue=5, maxValue=40, value=20, field=True) 

    #cmds.button(label = "OK", command = lambda *args: function1(cmds.intSliderGrp(value1, query=True, value=True)),function2(cmds.intSliderGrp(value2, query=True, value=True))) 
    cmds.button(label = "OK", command = lambda *args: function1(cmds.intSliderGrp(value1, query=True, value=True), cmds.intSliderGrp(value2, query=True, value=True))) 
    cmds.showWindow() 

createUI() 

답변

1
import maya.cmds as cmds 
from functools import partial 

# Dictionnary to store the ui important variables 
uiDic = {} 

#def function1(value): 
def function1(value1,value2): 
    print(value1) 
    print(value2) 
# another normal function 
def function2(value): 
    print(value) 

# save the slider value to the dic 
def setSliderUiDic(sliderName, *args): 
    entryName = '{}_value'.format(sliderName) 
    uiDic[entryName] = getSlider(sliderName) 

# get any slider value (in order to refresh) 
def getSlider(nameCtrl): 
    value = cmds.intSliderGrp(nameCtrl, query=True, value=True) 
    return value 

# create a def that combine multiple function to ui purposes 
def ui_func(*args): 
    slider1Value = uiDic['{0}_value'.format(uiDic['value1'])] 
    slider2Value = uiDic['{0}_value'.format(uiDic['value2'])] 
    function1(slider1Value, slider2Value) 
    function2(slider1Value) 

def createUI(): 
    #windowtest 
    if cmds.window("wintest", q=True, ex=True): 
     cmds.deleteUI("wintest") 
    cmds.window("wintest") 
    #layout 
    cmds.columnLayout(adjustableColumn=True) 
    #create the slider and store it to dic 
    uiDic['value1'] = cmds.intSliderGrp(label='number of moons', minValue=4, maxValue=20, value=12, field=True) 
    # Add a function to update the value of the slider 
    cmds.intSliderGrp(uiDic['value1'], e=True, cc=partial(setSliderUiDic, uiDic['value1'])) 
    # Store the default value 
    setSliderUiDic(uiDic['value1']) 

    #Do the same thing to slider 2 
    uiDic['value2'] = cmds.intSliderGrp(label='Distance from parent to child', minValue=5, maxValue=40, value=20, field=True) 
    cmds.intSliderGrp(uiDic['value2'], e=True, cc=partial(setSliderUiDic, uiDic['value2'])) 
    setSliderUiDic(uiDic['value2']) 

    # create a UI function that group multiple functions 
    cmds.button(label = "OK", command = ui_func) 
    cmds.showWindow() 

createUI()