1

Nuke で Python を使用して、選択したノードの名前のリストを取得しようとしています。私が試してみました:

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

これにより、選択したノードの名前が個別の文字列として表示されます。各文字列を結合するそれらに対して私にできることは何もありません。3 つの Merge を選択すると、Nuke スクリプト エディタで次のように表示されます。

結果: Merge3 Merge2 Merge1

最後の変数 n を括弧で囲むと、次のようになります。

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

それが、それらが別々の文字列であることを私が知っている方法です。選択したノードを返す別の方法を見つけました。私が使用した:

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

node3a7c000 のような奇妙な名前が返されますが、これらの名前は、nuke.toNode() のようにノードを呼び出すあらゆるもので機能し、すべて 1 行で表示されます。次のように、これらの結果を強制的にリストまたはタプルにしようとしました。

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']

リスト内包表記に慣れている場合は、リスト内包表記を使用namesして 1 行で作成することもできます。

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