我正在创建一个maya UI,但是在maya中运行一次replace_name按钮之后,当我尝试运行loadobject按钮命令两次时,我得到了这个错误:
cmds.textFieldButtonGrp(self.loadobject, e=True, text=select_objects[0])
RuntimeError:希望有人能帮我解决这个问题。谢谢。
import maya.cmds as cmds
class MyUI:
def __init__(self):
self.title = "Test UI"
self.window = cmds.window(self.title, widthHeight=(1000, 600),
resizeToFitChildren=1)
cmds.rowLayout("button1, button2, button3", numberOfColumns=5)
cmds.columnLayout(adjustableColumn=True, columnAlign="center",
rowSpacing=10)
self.loadobject = cmds.textFieldButtonGrp(label="Load Object name",
buttonLabel="Load",
text="Select Object %s."
% "and Load name",
buttonCommand=self.load)
self.basename = cmds.textFieldButtonGrp(label="Basename",
buttonLabel="Rename",
text="Enter basename.",
buttonCommand=self.replace_name)
cmds.setParent(menu=True)
cmds.showWindow(self.window)
def load(self, *args):
select_objects = cmds.ls(selection=True)
cmds.textFieldButtonGrp(self.loadobject, e=True, text=select_objects[0])
def replace_name(self, *args):
self.loadobject = cmds.textFieldButtonGrp(self.loadobject,
q=True, text=True)
self.basename = cmds.textFieldButtonGrp(self.basename,
q=True, text=True)
name = cmds.rename(self.loadobject, self.basename)
ctlname = "%s_ctl" % name
self.new_name = cmds.rename(name, ctlname)发布于 2012-08-10 22:53:07
您使用的是cmds,我强烈建议您使用pymel
import pymel.core as pm
但这不是你的问题。
问题出在逻辑上。
您有一个名为self.loadobject & self.basename的类成员变量。这2个表示Maya UI对象的名称。执行查询时,将使用Maya UI对象的内容覆盖这些变量。
然后,当您再次尝试使用这两个对象时,Maya会告诉您:
RuntimeError:“这家伙是谁!@#$你在说什么?”
我为我在Autodesk的朋友道歉,他们要么因为粗俗的语言而删除了第二行,要么只是在Maya中省略了一个有用的调试器。
import maya.cmds as cmds
#x=MyUI()
class MyUI:
def __init__(self):
self.title = "Test UI"
self.window = cmds.window(self.title, widthHeight=(1000, 600),
resizeToFitChildren=1)
cmds.rowLayout("button1, button2, button3", numberOfColumns=5)
cmds.columnLayout(adjustableColumn=True, columnAlign="center",
rowSpacing=10)
self.loadobjectTEXT = "Select Object and Load name"
self.loadobjectFIELDNAME = cmds.textFieldButtonGrp(label="Load Object name",
buttonLabel="Load",
text=self.loadobjectTEXT,
buttonCommand=self.load)
self.basenameTEXT = "Enter basename."
self.basenameFIELDNAME = cmds.textFieldButtonGrp(label="Basename",
buttonLabel="Rename",
text=self.basenameTEXT,
buttonCommand=self.replace_name)
cmds.setParent(menu=True)
cmds.showWindow(self.window)
def load(self):
select_objects = cmds.ls(selection=True)
cmds.textFieldButtonGrp(self.loadobjectFIELDNAME, e=True, text=select_objects[0])
def replace_name(self, *args):
self.loadobjectTEXT = cmds.textFieldButtonGrp(self.loadobjectFIELDNAME,
q=True, text=True)
self.basenameTEXT = cmds.textFieldButtonGrp(self.basenameFIELDNAME,
q=True, text=True)
name = cmds.rename(self.loadobjectTEXT, self.basenameTEXT)
ctlname = "%s_ctl" % name
self.new_name = cmds.rename(name, ctlname)发布于 2012-11-27 11:36:12
另外,我还尝试使用partial命令
from functools import partial
[...]
cmds.textFieldButtonGrp(label="Basename",
buttonLabel="Rename",
text=self.basenameTEXT,
buttonCommand=partial(self.replace_name))
[...]
def load(self, *args):
[...]在这种情况下,mutch对你来说并没有太大的变化。但是,如果你想通过一些变量的部分,让你的生活更容易;)
例如:
[...]
cmds.textFieldButtonGrp(label="Basename",
buttonLabel="Rename",
text=self.basenameTEXT,
buttonCommand=partial(self.replace_name, obj))
[...]
def load(self, obj, *args):
[...]发布于 2017-06-23 01:33:11
如前所述,问题出在代码的33和35行。您正在使用内容的查询字符串值覆盖textFieldButtonGrp对象。因此,当您返回并第二次运行查询/编辑时,因为这两个变量不再包含textFieldButtonGrp的实例,所以当Maya抛出错误时,它们现在是一个简单的字符串。只需将这两行代码从:
self.loadobject = ...
self.basename = ...到本地化的:
loadobject = ...
basename = ...或者,如果您需要在代码的其他部分中将它们作为实例化变量访问,则只需使用不同的变量名,如Mathieu所解释的:
self.loadobjectText = ...
self.basenameText = ...https://stackoverflow.com/questions/3492106
复制相似问题