0

Maya UI を作成していますが、Maya で replace_name ボタンを 1 回実行した後、loadobject ボタン コマンドを 2 回実行しようとすると、次のエラーが発生します。

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)
4

3 に答える 3

7

あなたはcmdsを使用していますが、代わりにpymelを強くお勧めし
import pymel.core as pm
ますが、それはあなたの問題ではありません.

問題はロジックにあります。&
というクラスメンバー変数があります。これら 2 つは Maya UI オブジェクトの名前を表します。クエリを実行すると、それらの変数が Maya UI オブジェクトのコンテンツで上書きされます。self.loadobjectself.basename

次に、これら 2 つのオブジェクトを再度使用しようとすると、Maya は次のように伝えます。

RuntimeError: "おい、!@#$ は誰のことを言っているんだい?"

Autodesk の友人には申し訳ありませんが、2 行目は言葉が粗いために検閲されたか、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-08-10T14:53:07.280 に答える
1

さらに、コマンドにパーシャルを使用することをお勧めします

from functools import partial

[...]

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

この場合、実際にはあまり変わりません。ただし、いくつかの変数を部分的に渡したい場合は、人生が楽になります;)

例:

[...]
cmds.textFieldButtonGrp(label="Basename",
                        buttonLabel="Rename",
                        text=self.basenameTEXT,
                        buttonCommand=partial(self.replace_name, obj))
[...]
def load(self, obj, *args):
[...]
于 2012-11-27T03:36:12.487 に答える