尝试添加旋钮时,出现“旋钮已连接到节点”的提示
当我尝试从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 ...
谢谢!
最佳答案
首先,我将elif
更改为else
,因为您的if条件已经在测试elif条件,并且在此代码中我看不到它将如何变化。
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)
不会检查该名称是否存在旋钮,否则您的代码将表现出预期的行为。因此,当我阅读the docs时,似乎可能发生了几件事:节点可能是也可能不是返回列表中的旋钮。如果知道只需要旋钮,则可以按类类型进行过滤。我认为可能看起来像
nuke.allNodes(nuke.Knob)
。我不认为nuke.Knob.knob(str)是对其名称或标签的测试。我阅读的文档暗示您的测试应该是:
if i.name != "tempMb":
或可能是if i.label != "tempMb"
,这取决于您创建t
的方式。尽管继续,我认为这里可能存在逻辑错误。如果您有2个节点(如果进行了上述更改,则假定它们都是旋钮),并且当您遍历所有节点时,第一个是
tempMb
,那么当您检查第二个节点时,它不会就是这样,您将尝试添加t
,我假设它也被命名为tempMb
。所以这就是为什么您看上去总是在出现负面情况的原因。您需要采用以下两种方法之一进行重组:
在循环之前,设置一个错误的布尔值,在循环中,当找到
tempMb
旋钮时将其设置为true;否则,将其设置为true。您最好在发生这种情况后立即退出循环。循环后,检查布尔值以查看添加t
是否安全。我看到一个可能的函数
nuke.exists(s)
,它告诉您是否有任何名为s
的“项目”。也许删除循环并编写以下代码:
if not nuke.exists("tempMb"):
# Add your knob. I'm actually not seeing `addKnob` in the docs.