Maya Python调用modul类函数

时间:2017-10-12 13:00:51

标签: python class maya

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

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

# NameError: name 'MyClass' is not defined #

它会创建窗口但是当我按下按钮时它会给我上面的错误。如果有人能帮助我,我会在这里失踪,那会很棒。

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

干杯,希望你们都过得愉快!

1 个答案:

答案 0 :(得分:1)

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

在这种情况下的问题是你试图像调用函数一样调用类。如果你只想要classmethod,你可以这样做

import loadTest

loadTest.MyClass.createWindow()

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

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

模块是分组相关功能而不是类的更好工具。如果类包含一些持久数据,那么只有Python才有意义。