最初に、if 条件が既にelif
elifelse
条件をテストしており、このコードでそれがどのように変化するかわかりません。
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)
第二に、その名前のノブの存在をチェックしないと仮定しています。そうしないと、コードが期待どおりに動作します。したがって、ドキュメントを読むと、いくつかのことが起こる可能性があるようです。
- ノードは、返されるリストのノブである場合とそうでない場合があります。ノブのみが必要であることがわかっている場合は、クラス タイプでフィルタリングできます。のように見えるかもしれません
nuke.allNodes(nuke.Knob)
。
- nuke.Knob.knob(str) は、その名前またはラベルのテストではないと思います。私はあなたのテストが次のようであるべきであることを暗示しているようにドキュメントを読みました:
if i.name != "tempMb":
またはおそらくif i.label != "tempMb"
それはあなたが作成した方法に依存しますt
.
ただし、ここに論理エラーがある可能性があると思います。2 つのノードがあり (上記の変更を行った場合、それらが両方ともノブであると仮定します)、すべてのノードをループすると、最初のノードtempMb
がを追加しようとしますがt
、これも名前が付けられていると思いtempMb
ます。そのため、ネガティブな状態が常に発生しているように見えます。
次の 2 つの方法のいずれかで再構築する必要があります。
- ループの前に false ブール値を設定し、ループ内でノブ
tempMb
が見つかったときに true に設定します。これが発生したらすぐにループを終了することもできます。ループの後、ブール値をチェックして、追加しても安全かどうかを確認しますt
。
nuke.exists(s)
という名前の「アイテム」があるかどうかを示す可能な関数が表示されs
ます。
おそらくループを削除して、次のように記述します。
if not nuke.exists("tempMb"):
# Add your knob. I'm actually not seeing `addKnob` in the docs.