首页 > 解决方案 > 如何在 MAYA 中的 python 脚本之间传递参数?

问题描述

我是 python 的新手,我试图在不同的脚本之间传递参数,但它们只更新一种方式:我用这样的架子调用 Maya 中的第一个脚本:

try:
        myPM.close()
except:pass
import sys
sys.path.append("C:/Users/manue/Desktop/test")
import UiMayaTest as SBIRP
reload(SBIRP)
myPM = SBIRP.createUI()

这称为脚本“UiMayaTest.py”是一个简单的窗口,带有一个 intField 条目和一个按钮:

import sys
import maya.cmds as cmds
from functools import partial

def buttonPressed(episode, *args):
    passValue(episode, *args)
    print '============== buttonPressed ================'
    print 'EpisodeName ', EpisodeName

    Var = ''
    import UiMayaTestFunction
    Var = UiMayaTestFunction.FindVarFunc(EpisodeName,Var)
    print 'Var : ',Var

def createUI(): 
    myWindow = "SomeWindow"
    if cmds.window(myWindow,ex=True):
        cmds.deleteUI(myWindow)
    cmds.window(myWindow)
    cmds.columnLayout( adjustableColumn=True )
    cmds.text( label='Episode:  ', align='left' )
    episode = cmds.intField( "Episode", minValue = 100, maxValue = 1000, value =100)
    cmds.button(l="Open Last LIT scene", w=150, h=30, command=partial(buttonPressed,episode))
    cmds.setParent("..")
    cmds.showWindow()

def passValue(episode, *args):
    global EpisodeName
    EpisodeName = `cmds.intField( episode, query = True, value = True)`

它调用的脚本称为“UiMayaTestFunction.py”,只返回一个名为 Var 的变量:

def FindVarFunc(EpisodeName, Var):
    print '============== FindVarFunc ================'
    print 'EpisodeName:' , EpisodeName 
    Var = 'Hello world'
    print 'Var: ',Var
    return Var

每次按下按钮时,从 UiMayaTest 到 UiMayaTestFunction 的变量“EpisodeName”都会得到很好的更新,但是如果我在 UiMayaTestFunction 中更改变量“Var”,它不会更新它,我总是得到相同的打印或“Var” ...提前感谢您的帮助...

标签: python-2.7argumentsmaya

解决方案


嗯....看来脚本确实做了它应该做的事情。您期望 Var 变量的结果是什么?让我们看看.. 如果按下按钮,则调用 buttonPressed() 函数。在那里,变量“Var”被初始化为一个空字符串“”。然后使用参数 Var 调用 FindVarFunc(),它仍然是一个空字符串。在 FindVarFunc() 中,变量 'Var' 被打印并返回,仍然是什么......你猜对了:一个空字符串。最后将函数的结果分配给变量'Var',结果是......打印的空字符串。它可以帮助分配 'Var' 其他东西,但一个空字符串,看看它是否工作得更好。


推荐阅读