Maya Python 调用模块 class 函数

Maya Python call modul class functions

嘿,我想了解在 Maya 中使用 Python 导入和重新加载脚本的过程。

我有以下代码抛出以下错误:

# NameError: name 'MyClass' is not defined #

它创建了 window 但是当我按下按钮时它给出了上面的错误。如果有人能帮助我解决我在这里所缺少的问题,那就太好了。

import maya.cmds as cmds
from functools import partial

class MyClass():

    @classmethod
    def createWindow(cls):

        windowID = 'window'

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

        window = cmds.window(windowID, title="Blast", iconName='Blast', widthHeight=(400, 200) )
        cmds.frameLayout( label='')

        cmds.button( label='Playblast' ,command= 'MyClass.createPlayblast()')

        cmds.showWindow( window )

    @classmethod
    def createPlayblast(cls):

        cmds.playblast( f= "playblast", fmt= "image")
        print "hallo"

MyClass.createWindow()

我这样称呼我的模块:

# call loadTest

import sys
Dir = 'S:/people/Jan-Philipp/python_scripts'
if Dir not in sys.path:
sys.path.append(Dir)
try: reload(loadTest)
except: from loadTest import MyClass

loadTest.MyClass()

干杯,希望大家度过愉快的一天!

您可能想从 window 中删除 MyClass.createWindow(),并将其留给调用代码。如所写,每次您 导入 模块时,它都会创建一个 window。最好只将初始化代码放入模块范围。

本例中的问题是您试图将 class 当作一个函数来调用。如果你只想要 class 方法,你可以这样做

import loadTest

loadTest.MyClass.createWindow()

在 Python 中,我们通常不需要做只有 class 方法的 make classes:通常您会使用模块。在这种情况下:

import maya.cmds as cmds
from functools import partial

def createWindow():

    windowID = 'window'

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

    window = cmds.window(windowID, title="Blast", iconName='Blast', widthHeight=(400, 200) )
    cmds.frameLayout( label='')

    cmds.button( label='Playblast' ,command= createPlayblast)

    cmds.showWindow( window )

def createPlayblast():

    cmds.playblast( f= "playblast", fmt= "image")
    print "hallo"

import loadTest
loadTest.createWindow()

与 class 相比,模块是对相关功能进行分组的更好工具。如果 class 包含一些持久数据,类 仅在 Python 中有意义。