【发布时间】:2017-06-04 05:06:40
【问题描述】:
我正在研究 python 为 Maya 开发工具(目前是 2015 年),但我无法准确理解我应该如何定义要在函数内部使用的变量或 ui 对象。当我尝试运行我的脚本时会弹出很多不同的错误(例如对于这个脚本:# Error: NameError: file line 1: name 'inputTextA' is not defined)
我一遍又一遍地遇到同样的问题,所以我希望有人向我解释我犯了什么样的错误以及将来要研究什么来解决这种麻烦。 (请仅 Python 和 Maya 回答!:))
下一个脚本保存在maya的脚本路径中,从架子上调用如下:
import uiTestA
reload (uiTestA)
uiTestA
在脚本中,根据您设置的单选按钮(A,B),在按下“执行”按钮后,一个函数应该使用 textField 信息运行。 脚本本身:
# -*- coding: utf-8 -*-
import maya.cmds as cmds
def printStuff (fieldID):
selObjs=cmds.ls(selection=True)
print "\n###############################################"
if ( cmds.radioButtonGrp( radioButtonsA, q=True, select=True )==1 ):
if len(selObjs)>0:
typeObj = cmds.textField( fieldID, query=True, text=True )
if typeObj=="exception":
print "EXCEPTION [%s] CASE A" % typeObj
elif typeObj=="":
cmds.error( "Please input something" )
else:
print "NORMAL [%s] CASE A" % typeObj
else:
cmds.error( "Please select a group or object in the scene." )
elif ( cmds.radioButtonGrp( radioButtonsA, q=True, select=True )==2 ):
typeObj = cmds.textField( fieldID, query=True, text=True )
if typeObj=="exception":
print "EXCEPTION [%s] CASE B" % typeObj
elif typeObj=="":
cmds.error( "Please input something" )
else:
print "NORMAL [%s] CASE B" % typeObj
print "\n###############################################\n"
winID = "uiTestA"
if cmds.window( winID, exists=True ):
cmds.deleteUI( winID )
cmds.window ( winID, sizeable=False, width=325, resizeToFitChildren=True )
formLay = cmds.formLayout( numberOfDivisions=100 )
radioButtonsA = cmds.radioButtonGrp( width=325, label='Search in: ', columnWidth3=(80,158,100), labelArray2=["A", "B"], select=1, numberOfRadioButtons=2 )
explanationA = cmds.text( width=330, label="Input:" )
inputTextA = cmds.textField( width=100 )
selectButton = cmds.button( width=150, label="Execute", command="%s.printStuff(inputTextA)"%__name__)
cmds.formLayout( formLay, edit=True, attachForm=[(radioButtonsA, 'top', 5), (radioButtonsA, 'left', 0), (explanationA, 'top', 30), (inputTextA, 'top', 45), (inputTextA, 'left', 117), (selectButton, 'top', 70), (selectButton, 'left', 92)] )
cmds.showWindow( winID )
我尝试定义一个函数来创建用户界面,例如:
# -*- coding: utf-8 -*-
import maya.cmds as cmds
def printStuff (fieldID):
selObjs=cmds.ls(selection=True)
print "\n###############################################"
if ( cmds.radioButtonGrp( radioButtonsA, q=True, select=True )==1 ):
if len(selObjs)>0:
typeObj = cmds.textField( fieldID, query=True, text=True )
if typeObj=="exception":
print "EXCEPTION [%s] CASE A" % typeObj
elif typeObj=="":
cmds.error( "Please input something" )
else:
print "NORMAL [%s] CASE A" % typeObj
else:
cmds.error( "Please select a group or object in the scene." )
elif ( cmds.radioButtonGrp( radioButtonsA, q=True, select=True )==2 ):
typeObj = cmds.textField( fieldID, query=True, text=True )
if typeObj=="exception":
print "EXCEPTION [%s] CASE B" % typeObj
elif typeObj=="":
cmds.error( "Please input something" )
else:
print "NORMAL [%s] CASE B" % typeObj
print "\n###############################################\n"
def ui()
winID = "uiTestA"
if cmds.window( winID, exists=True ):
cmds.deleteUI( winID )
cmds.window ( winID, sizeable=False, width=325, resizeToFitChildren=True )
formLay = cmds.formLayout( numberOfDivisions=100 )
radioButtonsA = cmds.radioButtonGrp( width=325, label='Search in: ', columnWidth3=(80,158,100), labelArray2=["A", "B"], select=1, numberOfRadioButtons=2 )
explanationA = cmds.text( width=330, label="Input:" )
inputTextA = cmds.textField( width=100 )
selectButton = cmds.button( width=150, label="Execute", command="%s.printStuff(inputTextA)"%__name__)
cmds.formLayout( formLay, edit=True, attachForm=[(radioButtonsA, 'top', 5), (radioButtonsA, 'left', 0), (explanationA, 'top', 30), (inputTextA, 'top', 45), (inputTextA, 'left', 117), (selectButton, 'top', 70), (selectButton, 'left', 92)] )
cmds.showWindow( winID )
然后从 Maya 的书架上正确调用它;但没有结果。 我对此很陌生,所以请温柔一点! :) 提前感谢您的时间和帮助!祝你今天过得愉快! :)
【问题讨论】:
标签: python user-interface maya