2010-08-16 70 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 = ...