Maya Python Script可以从控制台运行,不能从文件中运行

时间:2018-02-01 19:46:28

标签: python maya

import maya.cmds as cmds

#Function
def printTxtField(fieldID):
    print cmds.textField(fieldID, query=True, text=True)

#define ID string for Window
winID = 'myWindow'

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

cmds.window(winID)
cmds.columnLayout()
whatUSay = cmds.textField()
cmds.button(label='Click me', command='printTxtField(whatUSay)')
cmds.showWindow()

当我从maya的控制台执行它时,这工作正常。但当我将其保存为文件并执行时,我收到此错误消息:

# Error: Object 'myWindow|columnLayout30|textField29' not found.
# Traceback (most recent call last):
#   File "<maya console>", line 1, in <module>
#   File "<maya console>", line 5, in printTxtField
# RuntimeError: Object 'myWindow|columnLayout30|textField29' not found. #

我注意到columnLayout30 | textField29中的数字上升,每次我从控制台执行脚本,然后再次从文件中执行,我觉得很困惑,因为每次都会删除旧窗口。

我发现了这个问题: super function doesn't work inside a maya python module
但我不确定这是不是同一个问题。
我使用的是IDLE 3.6.4和Maya 2016 SP6

(我是一个孤独的艺术家,试图进入脚本。(python / maya和C#/ unity)我想说的是,学习编码部分真的不是那么难。有时可能很乏味,但是你几乎可以通过任何方式谷歌搜索。但它的设置几乎总是让我失望。安装IDE和库以及&#34;连接&#34;事情。这里我得到的所有错误非常感谢我对这里所缺少的任何一般性帮助。

2 个答案:

答案 0 :(得分:0)

我不想使用基于文本的命令。相反,您可以分配回调。 尝试的一个选择是使用lambda(因为你想传递自己的参数):

unpackString

答案 1 :(得分:0)

Lambda应该可以工作,但如果你想要更清楚的东西,请使用partial:

import maya.cmds as cmds
from functools import partial

#Function
# Don't forgot the *args because maya is putting one default last arg in -c flags
def printTxtField(fieldID, *args):
    print cmds.textField(fieldID, query=True, text=True)

#define ID string for Window
winID = 'myWindow'

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

cmds.window(winID)
cmds.columnLayout()
whatUSay = cmds.textField()
# syntax :: partial(function, argument1, argument2, ...etc)
cmds.button(label='Click me', command=partial(printTxtField, whatUSay))
cmds.showWindow()