2010-08-16 108 views
0

我创建一个玛雅UI但是当我尝试我在Maya中运行一次我REPLACE_NAME按钮后,运行我的装入对象按钮命令两次我得到这个错误:创建玛雅UI

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) 
+0

我认为如果你想得到答案,你将不得不对自己做更多的工作; Maya并不是那么有名,现在任何想要帮助的人都不得不去琢磨很多代码。 – katrielalex 2010-08-16 10:58:43

+1

不要说'玛雅不是那么有名'! – 2010-09-02 09:55:54

回答

7

您正在使用CMDS我强烈建议pymel代替
import pymel.core as pm
但是,这是不是你的问题。

问题出在逻辑上。
您有班级成员瓦尔斯称为self.loadobject & self.basename。这两个表示Maya UI对象的名称。当您执行查询时,将使用Maya UI对象的内容覆盖这些变量。

然后,当您尝试使用这些2个对象再次玛雅告诉你:

RuntimeError: "Dude who the [email protected]#$ are you talking about?"

我为我的朋友在欧特克道歉,他们要么删第二行由于粗俗的语言,或只是省略包括一个有用的调试器在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) 
+0

+1机智与错误消息;) – 2013-02-20 01:46:14

1

加,我sudgest用部分在这种情况下,命令

from functools import partial 

[...] 

cmds.textFieldButtonGrp(label="Basename", 
         buttonLabel="Rename", 
         text=self.basenameTEXT, 
         buttonCommand=partial(self.replace_name)) 
[...] 
def load(self, *args): 
[...] 

并没有真正改变过mutch给你。 但如果你想传递一些可变因素偏让你的生活easer;)

如:

[...] 
cmds.textFieldButtonGrp(label="Basename", 
         buttonLabel="Rename", 
         text=self.basenameTEXT, 
         buttonCommand=partial(self.replace_name, obj)) 
[...] 
def load(self, obj, *args): 
[...] 
0

如前所述,这个问题是与线33和代码的35。您正在使用其内容的查询字符串值覆盖textFieldButtonGrp对象。所以当你第二次回来并运行查询/编辑时,当Maya抛出错误,因为这两个变量不再持有textFieldButtonGrp的实例,它们现在是一个简单的字符串。单从这两行更改:

self.loadobject = ... 
self.basename = ... 

的本地化:

loadobject = ... 
basename = ... 

或者,如果您需要访问他们在你的代码的其他部分将实例变量,你只需要使用不同的变量名称如Mathieu解释:

self.loadobjectText = ... 
self.basenameText = ...