Python ColorSliderGrp和setAttr之间的链接

Python ColorSliderGrp和setAttr之间的链接,python,maya,Python,Maya,我有一段python代码要在Maya中使用,它应该通过UI colorSliderGrp从用户那里获取颜色,并使用它来设置材质,并将颜色设置为某些圆柱体 这是我的颜色滑块,用于我的createUI函数: colourControl=cmds.colorSliderGrp( label='Blue', rgb=(0, 0, 1) ) 然后我有我的setMaterial函数: def setMaterial(objName, colour, materialType='lambert'):

我有一段python代码要在Maya中使用,它应该通过UI colorSliderGrp从用户那里获取颜色,并使用它来设置材质,并将颜色设置为某些圆柱体

这是我的颜色滑块,用于我的createUI函数:

colourControl=cmds.colorSliderGrp( label='Blue', rgb=(0, 0, 1) )
然后我有我的setMaterial函数:

def setMaterial(objName, colour, materialType='lambert'):
   setName=cmds.sets(name='_MaterialGroup_', renderable=True, empty=True)
   shaderName = cmds.shadingNode(materialType, asShader=True)

   cmds.setAttr(shaderName+'.color', colour[0], colour[1], colour[2], type='double3')

   cmds.surfaceShaderList(shaderName, add=setName)
   cmds.sets(objName, edit=True, forceElement=setName)
我在第三个函数中使用objName和COLOR参数访问setMaterial,我在定义colourControl的行中得到一个错误:

 'NoneType' object has no attribute '__getitem__'
我在以下一个默认颜色示例后尝试了此操作:

def setMaterial(objName, materialType='lambert', colour=(0, 0, 1)):
   setName=cmds.sets(name='_MaterialGroup_', renderable=True, empty=True)
   shaderName = cmds.shadingNode(materialType, asShader=True)

   cmds.setAttr(shaderName+'.color', colour[0], colour[1], colour[2], type='double3')

   cmds.surfaceShaderList(shaderName, add=setName)
   cmds.sets(objName, edit=True, forceElement=setName)
我也试过其他的滑块,试着打印颜色控件,看看我在用什么,但我得到了

a|columnLayout73|colorSliderGrp58
其中a是我的UI窗口的名称,columnLayout和colorSlider后面的数字将在每次运行代码时不断更改


祝你有愉快的一天

我有一个简单的工作版本的代码,它应该按照您的预期工作。除非重新使用浮动滑块组,否则需要使用分部。如果是这样,您将看到如何使用滑块和查询颜色值

import maya.cmds as cmds
from functools import partial

def setMaterial(objName, myColorSlider, matType, *args):
    colorValue = cmds.colorSliderGrp(myColorSlider, q=True, rgb=True)
    setName=cmds.sets(name='_MaterialGroup_', renderable=True, empty=True)
    shaderName = cmds.shadingNode(matType, asShader=True)
    cmds.setAttr(shaderName+'.color', colorValue[0], colorValue[1], colorValue[2], type='double3')
    cmds.surfaceShaderList(shaderName, add=setName)
    cmds.sets(objName, edit=True, forceElement=setName)

cmds.window()
cmds.columnLayout()
myColorSlider = cmds.colorSliderGrp( label='Blue', rgb=(0, 0, 1))
cmds.colorSliderGrp(myColorSlider, edit=True,  cc=partial(setMaterial, "pSphere1", myColorSlider, "lambert") )
cmds.showWindow()

非常感谢。我已经能够在我的代码中实现这一点,即使没有分部代码,它现在也可以工作了。如果我理解正确的话,partial应该改变球体的属性,就像我改变滑块的位置一样?我不是在寻找它,只是在另一个函数中将颜色值传递给setAttr。