2

ノブを追加しようとすると、「ノブはすでにノードに接続されています」というメッセージが表示されます

menu.py ボタンからコードを実行しようとすると、これが表示されます。スクリプト エディタからスクリプトを実行すると、エラーが発生しません。なぜですか?

for i in nuke.allNodes():
    if not i.knob("tempMb"):
        if sum0 == 0:
            nuke.message("first tmp knob created")
            i.addKnob(t)
        elif sum0 != 0:
            nuke.message("second tmp knob created")
    else: 
        nuke.message("no nob created")     

tempMbという名前のノブがあるかどうかを確認しても..存在する場合、存在しないかのように実行します..編集:「t」は以前にInt_Knobとして定義されています...

ありがとう!

4

3 に答える 3

1

最初に、if 条件が既にelifelifelse条件をテストしており、このコードでそれがどのように変化するかわかりません。

for i in nuke.allNodes():
    if not i.knob("tempMb"):
        if sum0 == 0:
            nuke.message("first tmp knob created")
            i.addKnob(t)
        else:
            nuke.message("second tmp knob created")
    else: 
        nuke.message("no nob created")

i.knob(string)第二に、その名前のノブの存在をチェックしないと仮定しています。そうしないと、コードが期待どおりに動作します。したがって、ドキュメントを読むと、いくつかのことが起こる可能性があるようです。

  1. ノードは、返されるリストのノブである場合とそうでない場合があります。ノブのみが必要であることがわかっている場合は、クラス タイプでフィルタリングできます。のように見えるかもしれませんnuke.allNodes(nuke.Knob)
  2. nuke.Knob.knob(str) は、その名前またはラベルのテストではないと思います。私はあなたのテストが次のようであるべきであることを暗示しているようにドキュメントを読みました:if i.name != "tempMb":またはおそらくif i.label != "tempMb"それはあなたが作成した方法に依存しますt.

ただし、ここに論理エラーがある可能性があると思います。2 つのノードがあり (上記の変更を行った場合、それらが両方ともノブであると仮定します)、すべてのノードをループすると、最初のノードtempMbがを追加しようとしますがt、これも名前が付けられていると思いtempMbます。そのため、ネガティブな状態が常に発生しているように見えます。

次の 2 つの方法のいずれかで再構築する必要があります。

  1. ループの前に false ブール値を設定し、ループ内でノブtempMbが見つかったときに true に設定します。これが発生したらすぐにループを終了することもできます。ループの後、ブール値をチェックして、追加しても安全かどうかを確認しますt
  2. nuke.exists(s)という名前の「アイテム」があるかどうかを示す可能な関数が表示されsます。

おそらくループを削除して、次のように記述します。

 if not nuke.exists("tempMb"):
     # Add your knob. I'm actually not seeing `addKnob` in the docs.
于 2016-09-26T00:05:29.013 に答える
0

nuke.exists("Name of Knob")ノブが存在するかどうかを確認します。if ステートメントでそれを使用してみてください。

詳細についてはNuke フォーラムを参照してください。

nuke.exists のドキュメントも参照してください。

于 2016-09-26T00:18:09.590 に答える