Maya Python调用模块类函数

Maya Python调用模块类函数,python,class,maya,Python,Class,Maya,嘿,我想了解在Maya中使用Python导入和重新加载脚本的过程 我有以下代码引发以下错误: # NameError: name 'MyClass' is not defined # 它创建了一个窗口,但当我按下按钮时,它给出了上面的错误。如果有人能帮我找到我所缺少的东西,那就太好了 import maya.cmds as cmds from functools import partial class MyClass(): @classmethod def createW

嘿,我想了解在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()

干杯,希望你们都有一个美好的一天

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

本例中的问题是,您试图调用该类,就好像它是一个函数一样。如果您只需要classmethod,您可以这样做

import loadTest

loadTest.MyClass.createWindow()
在Python中,我们通常不需要创建只有类方法的类:通常使用模块。在这种情况下:

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"


与类相比,模块是对相关函数进行分组的更好工具。只有当类包含一些持久性数据时,类在Python中才有意义。

在这种情况下,您的帖子中的这一行是否有误?按钮(label='Playblast',command='MyClass.createPlayblast()')类似于:或者?button(label='Playblast',command='createPlayblast()')另外,不要使用回调的字符串引用版本--直接传递python函数。字符串版本在侦听器和生产代码中的工作方式不同,因此它们会产生很多bug。谢谢你,西奥多。你的页面和知识是金矿。继续努力!
import loadTest
loadTest.createWindow()