代码之家  ›  专栏  ›  技术社区  ›  jakenolan52

使用Python在Nuke中将选定的节点名添加到列表或元组中

  •  1
  • jakenolan52  · 技术社区  · 10 年前

    我正在尝试在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 node3a 7c400 node3a-7c800

    s = nuke.tcl("selected_nodes")
    
    s2 = s.replace(" ","', '")
    
    s3 = "(" + "'" + s2 + "'" + ")"
    
    print s3
    

    结果:(“node3a7c000”、“node3a7c400”、“Node3a3c800”)

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

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

    1 回复  |  直到 10 年前
        1
  •  2
  •   mhlester    10 年前

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

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

    这将为您提供:

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

    如果你熟悉列表的理解,你也可以用一个来 names 在一行中:

    names = [s['name'].value() for s in nuke.selectedNodes()]