0

我在 Autodesk Maya 中使用 Python,但这应该适用于任何地方。

我有一个类bRigUI,它继承自wingUtils文件内部的另一个类wingUtilities.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()

我在 UI 脚本中输入什么来调用类cName中方法内的函数wingUtils

4

2 回答 2

4

你不能。cName是一个局部变量,仅存在于 的函数上下文中wingUtils.wingUtil,并且只能通过该函数中的代码访问。

于 2013-02-25T01:16:43.190 回答
2

唯一的方法是将内部函数移动到外部范围。你有充分的理由让他们成为内部功能吗?如果是这样,就没有办法做你想做的事。否则你可以考虑重写那个类。目前这三个函数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 回答