2017-10-12 52 views
1

嘿,我想了解在Maya中使用Python導入和重新加載腳本的過程。Maya Python調用modul類函數

我有下面的代碼拋出以下錯誤:

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

我打電話我MODUL這樣的:

# 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

您可能想要從窗口中刪除MyClass.createWindow(),並將其留給調用代碼。正如所寫,它會創建一個窗口,每當你導入該模塊。最好只將初始化代碼放入模塊範圍中。

在這種情況下的問題是,您正試圖調用該類,就好像它是一個函數。如果只想類方法,你會做這樣的

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" 

import loadTest 
loadTest.createWindow() 

模塊是用於分組相關功能不是類更好的工具。如果類包含一些持久數據,則類只在Python中有意義。

+0

在這種情況下,在你的文章中發現這行錯了? cmds.button(label ='Playblast',command ='MyClass.createPlayblast()') 會是這樣的:或? cmds.button(label ='Playblast',command ='createPlayblast()') –

+0

是的,這是正確的。 – theodox

+1

另外,不要使用回調的字符串引用版本 - 直接傳遞python函數。字符串版本在偵聽器和生產代碼中的工作方式不同,因此它們會產生大量的錯誤。請參閱https://theodox.github.io/2014/maya_callbacks_cheat_sheet – theodox