1

我正在尝试在 Nuke 中使用 Python 获取所选节点的名称列表。我努力了:

for s in nuke.selectedNodes():
    n = s['name'].value()
    print n

这给了我所选节点的名称,但作为单独的字符串。我无法对他们做任何事情来组合每个字符串。如果我选择了三个合并,在 Nuke 脚本编辑器中我会得到:

结果:合并 3 合并 2 合并 1

如果我将最后一个变量 n 括在括号中,我会得到:

Result: ['Merge3']
['Merge2']
['Merge1']

这就是我知道它们是单独的字符串的方式。我找到了另一种返回选定节点的方法。我用了:

s = nuke.tcl("selected_nodes")
print s

我得到了奇怪的名字,比如 node3a7c000,但是这些名字在任何调用节点的东西中都有效,比如 nuke.toNode(),它们都在一行上。我试图将这些结果强制转换为列表或元组,如下所示:

s = nuke.tcl("selected_nodes")

print s

结果:node3a7c000 node3a7c400 node3a7c800

s = nuke.tcl("selected_nodes")

s2 = s.replace(" ","', '")

s3 = "(" + "'" + s2 + "'" + ")"

print s3

结果:('node3a7c000','node3a7c400','node3a7c800')

我的结果看起来具有元组的标准构造,但如果我尝试从元组中调用第一个值,我会得到一个括号。这就好像我创建的元组仍然是一个字符串。

我能做些什么来收集选定节点名称的列表或元组吗?我不确定我做错了什么,似乎我的最后一个解决方案应该有效。

4

1 回答 1

2

当您遍历每个节点时,您需要将其名称添加到列表 ( []) 中,然后将其返回。例如:

names = []
for s in nuke.selectedNodes():
    n = s['name'].value()
    names.append(n)
print names

这会给你:

# Result: ['Merge3', 'Merge2', 'Merge1']

如果您熟悉列表推导式,您还可以使用 one to make namesin one line:

names = [s['name'].value() for s in nuke.selectedNodes()]
于 2016-01-27T21:54:37.527 回答