【发布时间】:2018-06-20 23:54:03
【问题描述】:
我是 Python 新手,所以这似乎微不足道。我到处搜索以找到问题的答案,但似乎找不到。
我有一个脚本,就像一个迷你 Hypeshade 窗口,它的主要功能是创建材质并一键加载用户选择的所有纹理文件。当用户想要将噪音或检查器连接到文件输入之一(如凹凸、正常等)时,我希望有一个选项。这是在 Maya 中通过调用“createRenderNode”窗口来完成的。
现在,我让它工作了,它连接到我想要的输入,但我也想在我的 UI 中的相应文本字段中获取这个文件的名称,因为当我的函数运行时它没有,它得到一个空字符串,因为它还没有连接任何东西。
这是我的代码(我已经尝试了很多次迭代):
# Error: 'NoneType' object is not iterable
# Traceback (most recent call last):
# File "<maya console>", line 1, in <module>
# File "<maya console>", line 49, in brwa
# TypeError: 'NoneType' object is not iterable #
import maya.cmds as cmds
import pymel.core as pm
def UI():
if cmds.window("MatWindow", exists = True):
cmds.deleteUI("MatWindow")
mainwindow = cmds.window("MatWindow", t="Dummy UI", bgc=(0.2,0.2,0.2), mnb = False, mxb = False)
cmds.columnLayout()
cmds.rowColumnLayout(nr = 1)
cmds.textFieldGrp('mtNameTxt', l = "Material Name")
cmds.setParent ( '..' )
cmds.columnLayout()
cmds.button("createlamb", l = "Create Lambert", c = 'lamb()')
cmds.setParent ( '..' )
cmds.rowColumnLayout('albclm', nr = 1)
cmds.textFieldGrp('albtxt', l = "Albedo", pht = "Albedo Map")
cmds.iconTextButton('conna', w = 25, h = 20, i = "navButtonUnconnected.png", c = 'brwa()')
cmds.setParent( '..' )
cmds.separator(h = 20)
cmds.text("Insert a name first, then create the lambert, then try to load a texture")
cmds.showWindow()
cmds.window("MatWindow", e = 1, w=550, h=150, sizeable = 0)
UI()
#=========== Lambert ===========#
def lamb():
matName = cmds.textFieldGrp('mtNameTxt', q = True, text = True)
if cmds.objExists(matName) :
cmds.confirmDialog( t = "Error", m = "Material name already exists, please choose another name.", b = "OK")
else :
lambert = cmds.shadingNode("lambert", asShader = True, n = matName)
shading_group = cmds.sets(r = True, nss = True, em = True, n = '%s_SG' %matName)
cmds.connectAttr('%s.outColor' %matName ,'%s.surfaceShader' %shading_group)
def brwa():
matName = cmds.textFieldGrp('mtNameTxt', q = True, text = True)## this gets the material name from the UI
brwsa = '%s.color' %matName
pm.defaultNavigation(destination = brwsa, createNew = 1)
pm.defaultNavigation(destination = brwsa, defaultTraversal = 1) ## this opens the createRenderNode window
brwsafile = cmds.listConnections(brwsa) ## this gets the connected file
for fileName in brwsafile:
def button_cmd(_):
# _ is a dummy argument the button sends, but you can ignore it
cmds.select(fileName)
cmds.iconTextButton('conna', edit = 1, i = "navButtonConnected.png", c = button_cmd)
cmds.textFieldGrp('albtxt', edit = 1, text = fileName)
【问题讨论】: