0

Autodesk Maya 内で Python を使用していますが、これはどこにでも当てはまるはずです。

と呼ばれるクラスがあり、ファイル内でbRigUI呼び出される別のクラスから継承しますwingUtilswingUtilities.py

self.gPrefix継承を使用して / などの名前を取得できます。しかし、次のようなクラス内にある関数内の関数にアクセスする方法がわかりませんdef cName(txt):

wingUtilitiesスクリプトは次のとおりです。

import maya.cmds as cmds

class wingUtils():
    def __init__(self):
        pass
    def wingUtil(self, *args):
        self.gPrefix = cmds.textField(self.prefixField, q = True, text = True)
        self.lPrefix = cmds.textField(self.leftPrefixField, q = True, text = True)
        self.rPrefix = cmds.textField(self.rightPrefixField, q = True, text = True)

        def cName(txt):
            n = self.gPrefix + (txt)
        def lName(txt):
            n = self.gPrefix + self.lPrefix + (txt)
        def rName(txt):
            n = self.gPrefix + self.rPrefix + (txt)

w = wingUtils()

そして、これを呼び出そうとする非常に馬鹿げた UI スクリプトがあります (また、継承を持つクラスでもあります)

import maya.cmds as cmds
import jtWingRigAutomation.wingUtilities as wingUtilities

reload(wingUtilities)

class bRigUI(wingUtilities.wingUtils):
    def __init__(self):

        bRigUI = 'bRigUI'

        if cmds.window(bRigUI, exists = True):
            cmds.deleteUI(bRigUI)

            bRigUI = cmds.window('bRigUI', title = 'JT Wing Rig Automation')
        form = cmds.formLayout()
        tabs = cmds.tabLayout(innerMarginWidth = 5, innerMarginHeight = 5)
        cmds.formLayout(form, e = True, attachForm=((tabs, 'top', 0), (tabs, 'left', 0), (tabs, 'bottom', 0), (tabs, 'right', 0)))

        tab2 = cmds.rowColumnLayout('Wing Setup', parent = tabs)
        cmds.text(self.naming(), parent = tab2)

        cmds.showWindow(bRigUI)
        cmds.window(bRigUI, e = True, w = 250, h = 500)

b = bRigUI()

クラスcName内のメソッド内の関数を呼び出すには、UI スクリプトに何を入力すればよいですか?wingUtils

4

2 に答える 2

4

できません。cNameの関数コンテキスト内にのみ存在し、その関数内のwingUtils.wingUtilコードを介してのみアクセスできるローカル変数です。

于 2013-02-25T01:16:43.190 に答える
2

唯一の方法は、内側の関数を外側のスコープに移動することです。それらが機能内部である正当な理由はありますか? もしそうなら、あなたが望むことをする方法はありません。それ以外の場合は、そのクラスを書き直すことを検討してください。現在、3 つの関数cName()とは、外部から呼び出すことができるコードがなく、内部で呼び出されていないため、まったく何もしませんlName()rName()この場合、それらをインデント解除して追加するのと同じくらい簡単selfです:

class wingUtils():
    def __init__(self):
        pass
    def wingUtil(self, *args):
        self.gPrefix = cmds.textField(self.prefixField, q = True, text = True)
        self.lPrefix = cmds.textField(self.leftPrefixField, q = True, text = True)
        self.rPrefix = cmds.textField(self.rightPrefixField, q = True, text = True)

    def cName(self, txt):
        n = self.gPrefix + (txt)
    def lName(self, txt):
        n = self.gPrefix + self.lPrefix + (txt)
    def rName(self, txt):
        n = self.gPrefix + self.rPrefix + (txt)
于 2013-02-25T01:29:51.953 に答える