【发布时间】:2014-05-12 03:12:13
【问题描述】:
我创建了一个简单的重命名脚本,但我想请教一些建议,以便我可以改进编码以及磨练我的 python 脚本。下面是现在的一小部分代码...
虽然在我看来这可能不是问题,但除了我在下面说明的两个函数之外,我已经意识到我几乎所有的函数,它们都包含objects = cmds.ls(selection=True) 虽然我不介意重新输入一遍又一遍,但我相信有更好的方法来纠正这个问题。
但是,当我尝试在类函数之前将它们设为全局时,它能够运行,直到我厌倦了执行其中一个函数时,它会提示一个错误,指出 global name 'objects' is not defined 或“对象未定义”等.
关于这个,有什么建议吗?
class mainWindow(QDialog):
def __init__(self, parent=None):
super(mainWindow, self).__init__(parent)
self.resize(300,225)
self.initUI()
self.createConnections()
def searchReplace(self):
wordSearch = str(self.searchTxt.text())
wordReplace = str(self.replaceTxt.text())
objCnt = cmds.ls(sl=True, sn=True)
if len(objCnt) == 0:
self.searchTxt.clear()
self.replaceTxt.clear()
cmds.warning('Nothing is selected')
else:
for wordString in sorted(objCnt):
if wordSearch in wordString:
newWordString = wordString.replace(wordSearch, wordReplace)
cmds.rename(wordString, newWordString)
self.searchTxt.clear()
self.replaceTxt.clear()
print '%s' %wordString + " has changed to : " + "%s" %newWordString
def addPrefix(self):
objects = cmds.ls(selection=True)
pfx = str(self.prefixTxt.text())
for item in objects:
if pfx == "":
cmds.warning('No prefix values in the field')
else:
cmds.rename(item, pfx + "_" + item)
self.prefixTxt.clear()
print 'Prefix added: %s_' %pfx
def addSuffix(self):
objects = cmds.ls(selection=True)
sfx = str(self.suffixTxt.text())
for item in objects:
cmds.rename(item, item + "_" + sfx)
self.suffixTxt.clear()
print 'Suffix added: _%s' %sfx
def numPadding(self):
objects = pm.ls(selection=True)
num = self.numTxt.text()
padding = self.paddingTxt.text()
if num != "" and padding !="":
try:
for currentWordStr in objects:
pad = ("%%0%ii" % int(padding)) % int(num)
newWordStr = currentWordStr.rename(currentWordStr.name() + "_" + pad)
except Exception:
self.numTxt.clear()
self.paddingTxt.clear()
cmds.warning('Input numerical values only')
else:
cmds.warning('Entries of Num or Padding are empty')
def selectHierarchy(self):
sel = cmds.ls(selection = True)
selCnt = len(sel)
if int(selCnt) == 0:
cmds.warning('Nothing is selected')
else:
objHierarchy = cmds.listRelatives(ad=True, type='transform', fullPath=True)
cmds.select(sel, objHierarchy)
def clearHierarchy(self):
sel = cmds.ls(selection = True)
selCnt = len(sel)
if int(selCnt) != 0 :
objHierarchy = cmds.select(clear=True)
else:
cmds.warning('Selection is empty. Nothing to be cleared')
【问题讨论】:
-
您好!如果我正确理解您的帖子,这是您开始使用的代码,这很棒。您能否也发布一下您尝试过的导致全局名称错误的方法?另外,您是否考虑过使用类变量?
-
@Nacho 我试图在
class mainWindow(QDialog):行之前添加global objects和objects = cmds.ls(selection=True),所有其他功能(不包括选择和清除层次结构),我一直得到# RuntimeError: No object matches name,假设我正在选择 2 个项目(有一个子项的多维数据集 1 - 多维数据集 2)。此外,它只编辑/重命名父级而不是子级......顺便问一下,你如何使用类变量?老实说,我对def/class test(xxx)的理解还是很薄弱的
标签: python global-variables rename maya